Sshd_configに次の行を追加しました。
...
ForceCommand /bin/ssh-alert
...
ssh-alert
ファイルは次のようになります
#!/bin/bash
SSH_IP=$(echo $SSH_CLIENT | head -n1 | awk '{print $1;}')
yowsup-cli demos -c $YOWSUP_CONF -s $PHONENUMBER "SSH Alert! Login from IP $SSH_IP" > /dev/null 2>&1
#the important part:
/bin/bash --login
ここで問題となるのは、プログラムMobaXTermでSSHセッションを開始すると、SFTPウィンドウが空になり、sshセッションを閉じた後にWaiting for the pending transfer to complete...
と表示されることです。
/bin/bash --login
ファイルのssh-alert
を/bin/bash
に変更すると(--loginなし)再び機能しますが、.bashrc、.bash_profile、/ etc /bash.bashrcが取得されませんソース。
それがSSHセッションであり、SFTPセッションではない場合にのみForceCommandを実行する方法はありますか?または、bashスクリプトでSFTPセッションかどうかを確認する方法。
注:私の.bash_profileには、出力付きのコマンドがあります。その出力を無効にすると、再び機能します。
編集:FileZilla SFTPも機能しません!
それがSSHセッションであり、SFTPセッションではない場合にのみ、ForceCommandを実行する方法はありますか?.
番号。
または、bashスクリプトでSFTPセッションかどうかを確認する方法。
これは何 $SSH_ORIGINAL_COMMAND
はです。コマンドがSFTPであるかどうかにかかわらず、それを使用して区別できるはずです。
注:私の
.bash_profile
には出力付きのコマンドがあります。その出力を無効にすると、再び機能します。
それがSFTPプロトコルを壊している問題です。シェルがインタラクティブでない場合は、出力を生成しないでください。
if [ "$PS1" ]; then
# generate output
fi
ForceCommand
がsshd
によって実行されている場合、デーモンはこのセッションでそれ以上のアクションをドロップします。 sftpであるかどうか、および「sftpサブシステム」が必要かどうかはチェックされません。 SFTPセッションはbash
と通信できません。これがssh
とscp
の目的です。
SFTPが機能するためには、ForceCommand
スクリプトが最後に/usr/lib/openssh/sftp-server
または同様のハンドラーを実行する必要があります。