バナーなしのSSHクライアント接続(クライアントから)

バナーなしのSSHクライアント接続(クライアントから)

ssh私はいくつかのコンピュータに接続し、セッションを通していくつかのコマンドを実行する簡単なスクリプトを書いています。

sshpass -p 'password' ssh $target_ip << EOF
    echo \$PATH
    # example
    echo \$HOSTNAME
    [...]
EOF

仕事は正確ですが、私を悩ませるのは、すべての接続でsshサーバーバナーを表示し、スクリプトの残りの部分を妨げることですstdout

Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-81-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Wed Nov 23 11:58:14 CET 2022

  System load:  0.44               Processes:             131
  Usage of /:   9.2% of 108.79GB   Users logged in:       0
  Memory usage: 26%                IPv4 address for br0:  172.16.20.11
  Swap usage:   0%                 IPv4 address for br0:  10.130.1.1
  Temperature:  36.0 C             IPv4 address for tun0: 10.130.0.27

 * Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
   just raised the bar for easy, resilient and secure K8s cluster deployment.

   https://ubuntu.com/engage/secure-kubernetes-at-the-edge

241 updates can be installed immediately.
134 of these updates are security updates.
To see these additional updates run: apt list --upgradable


The list of available updates is more than a week old.
To check for new updates run: sudo apt update
New release '22.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

だから私はそのバナーが表示されたくありません。ただ私はここにいますEOF

関連がある場合に備えて、私が使用しているSSHバージョンはですOpenSSH_9.1p1, OpenSSL 3.0.7 1 Nov 2022OpenSSH_8.2p1 Ubuntu-4ubuntu0.3, OpenSSL 1.1.1f 31 Mar 2020

サーバーからバナーを削除したくありません。sshd構成から削除できます。私が望むのは、クライアントがスクリプトでバナー印刷を無効にすることです。

しかし、sshラインオプションは他の人には効果がありました(私はここそしてここ) 私には効果がなかった。

ssh -o LogLevel=error $ip

返品:

ssh -q $ip

クライアントレベルでこの機能を無効にするにはどうすればよいですか?これを行うためのSSHオプションやパラメータはありませんか?それ以外の場合は、実行中のコマンドの出力に触れることなくどのようにstdoutリダイレクトできますか?/dev/nullEOF

ベストアンサー1

BannerSSHサーバーのSSH認証オプションの前のバナーです。sshd_configサーバー構成を変更しない限り、サーバーがそれを送信しないようにすることはできません。クライアントはこれをstderrとして印刷する必要があるため、2>/dev/nullローカルでは表示されませんが、他のメッセージsshsshpassあなたの場合)もstderrとして印刷されません。

SSH 以降の認証バナーは、リモートシェルの一部の起動スクリプトから出る可能性が高くなります。*これらのバナーが表示されたら、ssh "$target_ip" dateサーバーの起動スクリプトを確認し、バナーの印刷を担当するコードを見つけて修正する必要があります。犯人が一部のグローバルスクリプト(あなたの/etc)にいる場合は、その個人スクリプト(あなたの$HOME)を作成して動作を変更できます。サーバーのログインシェルのドキュメントを参照してください。

バナーが表示されない場合は、ssh "$target_ip" date問題の現在のスクリプトが非対話型シェルのバナーを抑制することを意味します。この事実を利用して、サーバー上で何も変更せずにバナーをミュートすることができます。

リモート側に初期コマンドを渡さないため、sshpass -p 'password' ssh $target_ip << EOFSSH サーバーは対話型シェルを起動し、標準入力を読み取り、そこでドキュメントを使用します。

非対話型シェルを起動するには、コマンドを渡します。使用するシェルであり、インタラクティブで起動しないことを確認する必要があります。$SHELLここでは、ドキュメントのシェルが何であるかをローカルで知っているので、リモート値や何かに依存しないことをお勧めします。元のリモートシェルはもはや必要ないので、これはexec良い考えです。

次の例では、要求されたシェルは標準入力がbashttyではないため、対話式で開始されません(比較:SSHサーバーがこれを明示的に要求したために問題を引き起こすリモートシェルは、ttyに関係なく対話式で開始されます)。 。

sshpass -p 'password' ssh "$target_ip" 'exec bash' << EOF
    echo \$PATH
    # example
    echo \$HOSTNAME
    [...]
EOF

*通常、サーバーの公式のデフォルトシェルは何でも構いません。たとえば、bash起動スクリプトとは別に無条件に何かを印刷して実行するラッパーなどがありますbash。これは奇妙なシナリオですが、可能です。おそらくしかし、実際にはそうではありません。

おすすめ記事