Лучше не связываться с установкой python ...
Что вы можете сделать, так это вызвать pip3 для определенной версии python, в вашем случае:
python3.5 $(which pip3) install <some_package_...>
На справочной странице ssh_config
для ProxyCommand
написано
The command string extends to the end of the line, and is executed using the user's shell ‘exec’ directive to avoid a lingering shell process.
Я запустил это с 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
, это решит проблему.
При тестировании OpenSSH 7.4, в частности:
$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
Я смог установить для своей пользовательской оболочки значение /sbin/nologin
или /bin/false
и смог войти на сервер B через сервер A.
$ cat /etc/passwd
user1:x:1001:1001::/home/user1:/sbin/nologin
или
$ cat /etc/passwd
user1:x:1001:1001::/home/user1:/bin/false
хост A → BПопытка войти на сервер B (mulder )через сервер A (centos7 )сработала.
[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И на всякий случай, когда я просматривал виртуальную машину, было что-то смешное, я добавил в микс 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 ~]#
ПРИМЕЧАНИЕ.:В приведенном выше сценарии пользователь1 имеет /sbin/nologin
, определенный в /etc/passwd
на серверах centos7 и mulder.
Итак, я бы начал с -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_config
так, чтобы root мог войти в систему.