SSHは「ホストの認証を設定できません」メッセージをどのように表示しますか?

SSHは「ホストの認証を設定できません」メッセージをどのように表示しますか?

この警告メッセージを出力するためにsshによって使用されるシステムコールを追跡したいと思います。

> ssh root@abcde
The authenticity of host .. can't be established.

メッセージがstderrまたはstdoutに送信されると、明らかにwrite()stderr / stdoutのsshを示すシステムコールトレースがあります。

しかしそうではありません。

もしそうなら、SSHはどのように端末に警告メッセージを表示しますか? SSHは、stderr / stdoutと対話せずにメッセージを表示するために端末デバイスで直接機能しますか?

ベストアンサー1

ssh制御端末を開くと、すぐに対応する/dev/ttyメッセージが作成されます。

sshがユーザーと対話し、パスワードを読み取るために使用するfd sshと同じです。これにより、ユーザーはsshのstderrまたはstdinを透過的にリダイレクトできます。

$ strace -f -o /tmp/strace ssh -o UserKnownHostsFile=/dev/null localhost
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:XXXXXXXXXXXXX8XXXXXX8XXXX4XXXXXXXXXXXX3XXXX.
Are you sure you want to continue connecting (yes/no)? ^C
$ egrep 'open|write' /tmp/strace
...
3609  openat(AT_FDCWD, "/dev/tty", O_RDWR) = 4
3609  write(4, "The authenticity of host 'localh"..., 197) = 197

おすすめ記事