ローカルホストにsshできるアカウントがあります。
$ ssh root@localhost
# logout
Connection to localhost closed.
ただし、sshのJumpProxy機能では機能しません。
$ ssh -J root@localhost root@localhost
/sbin/nologin: invalid option -- 'c'
Usage:
nologin [options]
Politely refuse a login.
Options:
-h, --help display this help and exit
-V, --version output version information and exit
For more details see nologin(8).
ssh_exchange_identification: Connection closed by remote Host
これは、現在のユーザーのシェルが/ sbin/nologinに設定されていることに関連しているようです-一時的に変更してbashコマンドを実行すると、シェルアクセスを必要としないユーザーに対してはシェルアクセスを無効にすることがベストプラクティスのように見えますが、(なぜ???)JumpProxyはそれを必要としますか?
ProxyCommand
のssh_config
のマンページには、
コマンド文字列は行末まで続き、ユーザーのシェルの「exec」ディレクティブを使用して実行され、シェルプロセスが残るのを回避します。
私はこれをstrace
で実行し、以下を確認しました。
write(2, "debug1: Executing proxy command:"..., 114debug1: Executing proxy command: exec ssh -l rundeck -v -W '[target]:22' proxy
[pid 30151] execve("/usr/sbin/nologin", ["/usr/sbin/nologin", "-c", "exec ssh -l rundeck -v -W '[172."...], 0x55f477e50ab0 /* 15 vars */ <unfinished ...>
基本的に、SSHは巧妙な方法でユーザーのシェルを検索し、シェルを使用してプロキシコマンドを実行しようとしていると思います。しかし、シェルが存在しない場合は失敗します。
Shell
を実行する前に環境変数ssh
を設定すると、問題が解決します。