私のbashファイルには次の行があります。
LIST=$(ssh 192.168.0.22 'ls -1 /web');
私が抱えている問題は、それが自動化されたスクリプトの一部であり、必要なデータではなくstdout
で頻繁に取得されることです。
ssh_exchange_identification: Connection closed by remote Host
LIST
はstdout
のls
のみを取得することを理解しています。したがって、コマンドからより多くの情報を取得するコマンドを探しています。特に:
stdout
for ls
-私は今それを持っていますstderr
for ls
-あまり興味がないので、問題はないと思いますstdout
for ssh
-興味がない、何が出力されるのかさえわからないstderr
for ssh
-THIS IS何を探しているのかssh
が正しいかどうかを確認します。これ空であることは、データが$LIST
私が期待するUbuntu 16.04(LTS)のssh manページから:
EXIT STATUS
ssh exits with the exit status of the remote command or with 255 if an error occurred.
それを知っていれば、ssh
コマンドの終了ステータスを確認できます。終了ステータスが225
、それはssh
エラーであることがわかっています。それが他のゼロ以外の値である場合、それはls
エラーです。
#!/bin/bash
TEST=$(ssh $USER@localhost 'ls /proc' 2>&1)
if [ $? -eq 0 ];
then
printf "%s\n" "SSH command successful"
Elif [ $? -eq 225 ]
printf "%s\n%s" "SSH failed with following error:" "$TEST"
else
printf "%s\n%s" "ls command failed" "$TEST"
fi
ssh
の標準エラーをコマンド置換内のファイルにリダイレクトし、ファイルが空かどうかをテストします。
output="$( ssh server 'command' 2>ssh.err )"
if [[ -s ssh.err ]]; then
echo 'SSH error:' >&2
cat ssh.err >&2
fi
rm -f ssh.err
SSH error:
に続いてssh
からキャプチャされたエラー出力が表示されます。