パスワードを入力するリモートシェルスクリプト

パスワードを入力するリモートシェルスクリプト

パスワードを入力せずにリモートサーバーにログインし、リモートSSHコマンドを実行するスクリプトをどのように実行できますか?

たとえば、

リモートサーバーにログインしてgit pullコマンドを実行すると、sshパスワードの入力を求められます。

$ git pull origin master
Enter passphrase for /home/v3ed2/.ssh/id_rsa:

パスワードを入力した後、コマンドを実行し続けます。

リモートサーバーにログインしてコマンドを実行するスクリプトを実行したいと思います。私は次のスクリプトを試しました。

ssh ve "cd clients/ ; git pull"

ただし、スクリプトの実行時にパスワードの入力を求めるプロンプトは表示されません。パスワードの待機中にスクリプトが中断されますが、パスワードを入力しようとするとエラーが発生します。

bash: line 1: [REDACTED]: command not found    

答え1

コマンドなしでsshを実行すると、サーバー側に疑似端末が設定され、その端末で対話型シェルが実行されます。コマンドを渡すと、リモート端末なしでコマンドの入力と出力がSSHチャネルに直接接続されて実行されます。このオプションに合格すると、-tリモート側に端末が作成され、パスワードを入力するためのパスワードプロンプトが表示されます。

ssh -t ve "cd clients/ ; git pull"

しかし、これは便利な方法ではありません。便利な方法は、ローカルコンピュータでSSHエージェントを実行し、そのエージェントに接続を転送することです。

まず、2番目の接続(gitサーバーへ)では、パスワード認証ではなく公開鍵認証を使用する必要があります。すでにこれを行っているので、詳しく説明しません。

2番目のサーバー(中間コンピュータ)の秘密鍵を/home/v3ed2/.ssh/id_rsaローカルコンピュータにコピーします。または、gitサーバーがローカルマシンにある秘密鍵の公開鍵を保持することを許可します。または、まず実行してssh -t ve ssh-add .ssh/id_rsa中間コンピュータのキーをローカルエージェントに登録します。

一部のディストリビューションおよびデスクトップ環境では、SSHエージェントがすでに設定されています。実行中のエージェントがあることを確認してくださいssh-add -l。実行中のエージェントがないことを示す場合は、セッションでエージェントを開始する必要があります。直接呼び出すssh-agent your-session-managerのではなく実行するか、セッション起動スクリプトから実行するか、GUI設定で「SSHエージェントを実行する」チェックボックスを選択します。 2つのことを行う必要があります。プログラムを起動し、プログラムが設定またはセッション環境に印刷する変数を取得します。これを行う方法の詳細は、展開とデスクトップ環境によって異なります。your-session-managereval $(ssh-agent)ssh-agentSSH_AUTH_SOCK

SSHエージェントをローカルで実行した後にそれを渡す必要があります。これはデフォルトで渡されたり、渡されたりすることはありません。ssh ev ssh-add -lプロキシが配信中であることを確認するには、実行してください。そうでない場合は、この行をForwardAgent yesローカル~/.ssh/config

PuTTYを使用してWindowsをローカルで実行している場合は、コアエージェントであるPageantも付属しています。よりパテマニュアル指示のために。

ssh-add ~/.ssh/id_rsa有効なSSHエージェントが設定されている場合は、コマンド(または秘密鍵へのパス)を使用して、セッションごとに一度にエージェントに鍵を登録してください。その後、残りのセッション中にメッセージを表示せずにキーを使用できます。

答え2

この質問は広すぎるため、解決策はさまざまです。

1つ目は、パスワードなしでキーを使用することです。技術的には、パスワードはローカル秘密鍵を暗号化するいくつかの対称暗号化アルゴリズムの鍵です。空のパスワードは、鍵が暗号化されておらず、鍵を読み取る権限を持つすべての人が使用できることを意味します。 ssh-keygenに空のパスワードを使用するように指示できます。-N ''作成時に使用するか、後で変更するために使用-血(ここのすべてのオプションはOpenSSHバージョンに適用されます)。これは、リモートシステムへの署名付き自動アクセスを提供する最も広く使用されている方法です。多くの場合、キーに対するサーバー側の制限(IP制限、強制コマンド、制限付きシェルなど)と組み合わせられます。

必要に応じて、暗号化されたディスクから暗号化されていない秘密鍵を保護できます。

次に、ssh-agentを使用できます。ユーザーはシステムにログインする必要があり、実行時にパスワードをメモリにキャッシュするため、X 端末セッション(またはシミュレーション)中に一度だけパスワードを入力すると、パスワードを繰り返すことなくリモートサーバーに自動的にログインできます。 。

次に、クライアントとサーバーホストが同じゾーンに属している場合は、独自のセッションタイムチケットでリモートログインを提供するKerberosを使用できます。

次のように使用できます予想されるあるいは、同様のツールを使用して、コマンドを実行する端末と自動的にやり取りすることもできます。そのスクリプトはパスワードプロンプトを受け取り、入力する必要があります。ただし、これはここで説明されている他のすべての方法よりはるかに複雑で面倒なので、他の方法が失敗した場合は最後の手段として考慮する必要があります。

リストは、よりエキゾチックな方法で進むことができます:)

答え3

あなたが探しているのはSSHキーを使うことだと思います。キーセット(1つの秘密鍵と1つの公開鍵)を作成し、リモートシステムのアカウントに公開鍵を追加する必要があります。キーが見つかったら、パスワードを入力しなくてもリモートで別のシステムにログインできます。

詳細については、次の方法を確認してください。

関連情報