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

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

localhostに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でこれを要求するのですか?

ベストアンサー1

OpenSSH 7.4を使用したテストでは、具体的には次のようになります。

$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

ユーザーのシェルをまたはに設定でき、サーバーAを介してサーバーBにログインできました/sbin/nologin/bin/false

はい

$ cat /etc/passwd
user1:x:1001:1001::/home/user1:/sbin/nologin

または

$ cat /etc/passwd
user1:x:1001:1001::/home/user1:/bin/false
ホストA→B

私はサーバーA(centos7)を介してサーバーB(mulder)にログインしようとしています。

[vagrant@centos7 ~]$ ssh -J user1@localhost root@mulder
user1@localhost's password:
Last login: Sat Jul 21 15:59:00 2018 from macbook1
[root@mulder ~]#
ホストA→B→C

VMで興味深い点を見つけた場合、3番目のホストを追加しても機能します。

[vagrant@centos7 ~]$ ssh -J user1@localhost,user1@mulder root@skinner
user1@localhost's password:
user1@mulder's password:
Last login: Sat Jul 21 16:09:48 2018 from 192.168.1.10
[root@skinner ~]# 

メモ:上記のシナリオでは、user1は/sbin/nologincentos7およびmulderサーバーで定義されています。/etc/passwd

問題のデバッグ

それでは-vvvスイッチでデバッグを始めましょうssh

$ ssh -vvv -J user1@localhost,user1@mulder root@skinner
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 58: Applying options for *
debug1: Setting implicit ProxyCommand from ProxyJump: ssh -l user1 -J user1@localhost -vvv -W %h:%p mulder
debug1: Executing proxy command: exec ssh -l user1 -J user1@localhost -vvv -W skinner:22 mulder
...
...
debug1: Setting implicit ProxyCommand from ProxyJump: ssh -l user1 -vvv -W %h:%p localhost
debug1: Executing proxy command: exec ssh -l user1 -vvv -W mulder:22 localhost
...
...
debug2: PTY allocation request accepted on channel 0
debug2: channel 0: rcvd adjust 2097152
debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 0
debug2: shell request accepted on channel 0
Last login: Sat Jul 21 16:10:28 2018 from 192.168.1.10
[root@skinner ~]#

メモ:上からジャンププロキシサーバーを通過しながら、さまざまなコマンドに展開され、-J実際に後ろから実行されているタスクを見ることができます。ssh

問題をより詳細に分類するには、これらのコマンドを直接実行して実行方法を確認することをお勧めします。

ルート@ローカルホスト→ルート@ローカルホスト

ssh私の実験では、次のように試してみました。

$ ssh -J root@localhost root@localhost
root@localhost's password:
root@localhost's password:
Last login: Sat Jul 21 16:40:54 2018 from localhost
CentOS 7 Build 1805.02
$

これを行うには、/etc/ssh/sshd_configrootログインを許可するように設定する必要があります。

引用する

おすすめ記事