解決策 1:
なぜあなたがこれを正しく行うことに嫌悪感を抱いているのかわかりません-サーバー上でも.
PrintMotd no
PrintLastLog no
そして
#/etc/pam.d/ssh
# Print the message of the day upon successful login.
# session optional pam_motd.so
または、ユーザーごとに ~/.hushlogin を追加します。
ヒント、~/.hushlogin については、/etc/skel に追加して、新しいユーザー ホーム ディレクトリがファイルと共に作成されるようにします。
更新:
バックアップ cron ジョブに関する詳細情報がなければ、コマンドの出力をファイルにリダイレクトし (または cron に電子メールでキャプチャさせる)、ssh セッションの出力を /dev/null にリダイレクトすることをお勧めします。次のようなもの:
0 0 * * * ssh backuphost "backup_script_that_writes_to_a_log" >/dev/null
または
0 0 * * * ssh backuphost "backup_command 2>&1" >/dev/null
コマンドを少しいじる必要がありますが、それで始められるはずです。
解決策 2:
ユーザーごとにこれが必要な場合は、 touch ~/.hushlogin
を実行してください これで OpenSSH の準備は完了です。
更新 :他の場所で指摘されているように、 pam_motd
ユーザーごとの .hushlogin
を使用しないように構成できます; /etc/login.defs
をチェック HUSHLOGIN_FILE
の場合 .すべてのユーザーを /etc/hushlogins
にリストするように構成できます
解決策 3:
@note すべての例は、変数 connectionString
を設定したことを前提としています [email protected]
のようなもので .
解決策にたどり着いた方法
ssh -T
の使用 単純なコマンドで機能するはずです。たとえば、これは追加情報を出力しません:
ssh -T $connectionString "echo 'blah'"
問題は、here-doc を使用して多くのコマンドを実行しようとする場合です。たとえば、以下は機能しません。今日のメッセージ (MoTD) がエコーされ、「stdin:is not a tty」と表示される場合もあります。
somethingLocal='something local'
ssh -T $connectionString <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
この問題を回避するには、最初にコマンドをローカル変数に保存し、それらをリモート サーバーに送信する必要があります。
somethingLocal='something local'
read -r -d '' commands <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
ssh -T $connectionString "$commands"
しかし、それは厄介です...
最終的な解決策
汎用関数を作成します (コマンドとして文字列または HEREDOC を使用できることに注意してください)。
function silentSsh {
local connectionString="$1"
local commands="$2"
if [ -z "$commands" ]; then
commands=`cat`
fi
ssh -T $connectionString "$commands"
}
例
次のように使用します:
somethingLocal='something local'
silentSsh $connectionString <<EOC
echo 'blah'
echo "blah $somethingLocal"
EOC
またはそのように:
silentSsh $connectionString "echo 'blah'"
またはそのように:
silentSsh $connectionString <<'EOC'
echo 'blah'
somethingRemote=`echo 'whatever'`
echo "blah $somethingRemote"
EOC
またはそのように:
silentSsh $connectionString < getlines.sh
解決策 4:
このハックはどうですか?;-P
ssh -t [email protected] '/bin/bash'
以下はではない 有効:
-T
を渡す ssh に接続して tty 割り当てを無効にします:
ssh -T machineName 'echo foo'
解決策 5:
これはどのオペレーティング システムですか?一部のシステム (ubuntu など) では、motd は ssh サーバー (/etc/ssh/sshd_config の PrintMotd) ではなく、pam_motd を使用した pam によって出力されます。この場合、おそらくクライアントから制御することはできません。