web-dev-qa-db-ja.com

ssh-sftpセッションで実行されるForceCommand

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も機能しません!

2
Scrumplex

それがSSHセッションであり、SFTPセッションではない場合にのみ、ForceCommandを実行する方法はありますか?.

番号。

または、bashスクリプトでSFTPセッションかどうかを確認する方法。

これは何 $SSH_ORIGINAL_COMMANDはです。コマンドがSFTPであるかどうかにかかわらず、それを使用して区別できるはずです。

注:私の.bash_profileには出力付きのコマンドがあります。その出力を無効にすると、再び機能します。

それがSFTPプロトコルを壊している問題です。シェルがインタラクティブでない場合は、出力を生成しないでください。

if [ "$PS1" ]; then
  # generate output
fi
1
Jakuje

ForceCommandsshdによって実行されている場合、デーモンはこのセッションでそれ以上のアクションをドロップします。 sftpであるかどうか、および「sftpサブシステム」が必要かどうかはチェックされません。 SFTPセッションはbashと通信できません。これがsshscpの目的です。

SFTPが機能するためには、ForceCommandスクリプトが最後に/usr/lib/openssh/sftp-serverまたは同様のハンドラーを実行する必要があります。

0
kubanczyk