web-dev-qa-db-ja.com

SSH ProxyJumpにはローカルシェルアクセスが必要ですか?

ローカルホストに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はそれを必要としますか?

5
mnagel

ProxyCommandssh_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を設定すると、問題が解決します。

1
Jarryd