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

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

パスワードを入力せずにリモートサーバーにログインし、リモート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エージェントが設定されている場合は、コマンド(または秘密鍵へのパス)を使用して、セッションごとに一度にエージェントに鍵を登録してください。その後、残りのセッション中にメッセージを表示せずにキーを使用できます。

おすすめ記事