Ssh接続を作成し、スクリプト内からリモートサーバーでいくつかのことをしようとしています。
ただし、端末はパスワードの入力を要求し、スクリプトではなく端末ウィンドウで接続を開きます。接続を終了するまで、コマンドは実行されません。
Bashスクリプト内からどのようにsshできますか?
パスワードプロンプトを消したい場合は、キーベースの認証を使用します( ここで説明 )。
Sshを介してコマンドをリモートで実行するには、次のように、sshの引数としてコマンドを指定する必要があります。
root @ Host:〜#ssh root @ www 'ps -ef | grep Apache | grep -v grep | wc -l '
パスワードの使用を継続し、キー交換を使用しない場合は、次のように「expect」でこれを実現できます。
#!/usr/bin/expect -f
spawn ssh user@hostname
expect "password:"
sleep 1
send "<your password>\r"
command1
command2
commandN
共有接続を使用してそれを行う別の方法があります。つまり、誰かがパスワードを使用して接続を開始し、その後のすべての接続が同じチャネルで多重化され、再認証の必要性がなくなります。 (そして、その高速も)
# ~/.ssh/config
ControlMaster auto
ControlPath ~/.ssh/pool/%r@%h
その後、ログインするだけで、ログインしている限り、bashスクリプトはssh接続を開くことができます。
誰かがまだチャンネルを開いていない場合、次の方法でスクリプトの動作を停止できます。
ssh ... -o KbdInteractiveAuthentication=no ....
必要なのは、スクリプトを実行するユーザーのSSHキーを交換することです。 このチュートリアル をご覧ください
そうすると、パスワードを入力しなくてもスクリプトが実行されます。ただし、セキュリティのために、rootユーザーに対してこれを行うのは望ましくありません。