パスワードを入力せずにリモートサーバーにログインし、リモート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-manager
eval $(ssh-agent)
ssh-agent
SSH_AUTH_SOCK
SSHエージェントをローカルで実行した後にそれを渡す必要があります。これはデフォルトで渡されたり、渡されたりすることはありません。ssh ev ssh-add -l
プロキシが配信中であることを確認するには、実行してください。そうでない場合は、この行をForwardAgent yes
ローカル~/.ssh/config
。
PuTTYを使用してWindowsをローカルで実行している場合は、コアエージェントであるPageantも付属しています。よりパテマニュアル指示のために。
ssh-add ~/.ssh/id_rsa
有効なSSHエージェントが設定されている場合は、コマンド(または秘密鍵へのパス)を使用して、セッションごとに一度にエージェントに鍵を登録してください。その後、残りのセッション中にメッセージを表示せずにキーを使用できます。