1

Я хотел бы войти на удаленный сервер, выполнив STH. как ssh remoteServer. Доступ к удаленному серверу возможен только через сервер входа в систему (их два).

Есть два маршрута, которые я хотел бы использовать (если невозможно использовать один сервер входа в систему):

  1. ABD
  2. ACD

Некоторая информация:

  • A: мой локальный компьютер
  • B: сервер входа в систему; разрешено только логин В / пароль (без ключевого файла); Я не могу внести изменения (сохранить файл ключа и т.д.)
  • C: сервер входа в систему; позволяет войти в файл ключа; Я могу внести некоторые изменения (но не суперпользователь)
  • D: целевой сервер; может быть достигнуто только из B или C; позволяет входить в файл ключа

Я использую защищенный паролем файл закрытого ключа (на A и C; тот же самый), который я могу использовать для входа в C и D. Вот что я хочу:

  1. ssh B_D: запрашивает пароль для имени пользователя B @ B, а затем для пароля файла закрытого ключа для имени пользователя D @ D. Поскольку я не могу сохранить закрытый ключ на B, его нужно как-то переслать. Если я загрузил его с помощью ssh-agent, он больше не должен запрашивать пароль.
  2. ssh C_D: один раз запросить пароль закрытого ключа, а затем использовать его для входа в систему с именем пользователя C @ C, а затем с именем пользователя D @ D. Опять же, если ключ был предварительно загружен с помощью ssh-agent, он не должен запрашивать пароль.

Частично я могу использовать следующую команду для достижения вышеуказанного (но только если ключ был загружен с помощью ssh-agent):

ssh -A -t usernameB@B ssh usernameD@D
ssh -A -t usernameC@C ssh usernameD@D

Возможно, есть модификация, которая сначала загружает файл ключа, но только для этого сеанса? Если я выйду из системы, файл ключа должен быть выгружен.

Приведенная выше команда имеет две проблемы:

  1. Я не хочу сначала вручную загружать ключ с помощью ssh-agent. Это противоречит цели ввода только одной команды.
  2. Я хочу поместить эту или эквивалентную команду в файл конфигурации ssh. Если есть другой способ добиться того, чего я хочу, это тоже будет хорошо (если мне не нужно ничего изменять в B или нужны права суперпользователя на C).

Я смог достичь чего-л. аналогично, используя конфигурационный файл ssh:

Host C
    HostName addressOfC
    User usernameC
    IdentityFile ~/.ssh/id_rsa
    ForwardAgent yes

Host C_D
    HostName addressD
    User usernameD
    IdentityFile ~/.ssh/id_rsa
    Port 22
    ProxyCommand ssh -A -W %h:%p C

Опять две проблемы:

  1. Мне нужно сначала загрузить ключ с помощью ssh-agent. В противном случае он дважды запрашивает пароль.
  2. Требуется возраст (24 секунды) для подключения. Я должен упомянуть здесь, что я на Windows использую mobaXterm, на случай, если это будет отвечать за 24 секунды.

Есть один последний улов: переадресация агента, по-видимому, небезопасна согласно https://heipei.github.io/2015/02/26/SSH-Agent-Forwarding-considered-harmful/. Таким образом, решение, которое избегает пересылки агента, было бы хорошо.

Редактировать:

После замечаний от @jakuje я изменил файл конфигурации:

Host C
    HostName addressOfC
    User usernameC
    IdentityFile ~/.ssh/id_rsa

Host C_D
    HostName addressD
    User usernameD
    IdentityFile ~/.ssh/id_rsa
    Port 22
    ProxyCommand ssh -W %h:%p C

ssh -vvv C_D я получаю следующий журнал (MobaXterm 7.4):

OpenSSH_6.2p2, OpenSSL 1.0.1g 7 Apr 2014
debug1: Reading configuration data /home/mobaxterm/.ssh/config
debug1: /home/mobaxterm/.ssh/config line 24: Applying options for C_D
debug1: Reading configuration data /etc/ssh_config
debug2: ssh_connect: needpriv 0
debug1: Executing proxy command: exec ssh -W addressOfD:22 C
debug1: permanently_drop_suid: 1000
debug3: Incorrect RSA1 identifier
debug3: Could not load "/home/mobaxterm/.ssh/id_rsa" as a RSA1 public key
debug1: identity file /home/mobaxterm/.ssh/id_rsa type 1
debug1: identity file /home/mobaxterm/.ssh/id_rsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5*
debug2: fd 5 setting O_NONBLOCK
debug2: fd 4 setting O_NONBLOCK
debug3: load_hostkeys: loading entries for host "addressOfD" from file "/home/mobaxterm/.ssh/known_hosts"
debug3: load_hostkeys: found key type RSA in file /home/mobaxterm/.ssh/known_hosts:1
debug3: load_hostkeys: loaded 1 keys
debug3: order_hostkeyalgs: prefer hostkeyalgs: ssh-rsa-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-rsa
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug2: kex_parse_kexinit: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-rsa,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-dss-cert-v00@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-dss
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: zlib@openssh.com,zlib,none
debug2: kex_parse_kexinit: zlib@openssh.com,zlib,none
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,zlib@openssh.com
debug2: kex_parse_kexinit: none,zlib@openssh.com
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: mac_setup: found hmac-md5
debug1: kex: server->client aes128-ctr hmac-md5 zlib@openssh.com
debug2: mac_setup: found hmac-md5
debug1: kex: client->server aes128-ctr hmac-md5 zlib@openssh.com
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug2: dh_gen_key: priv key bits set: 135/256
debug2: bits set: 533/1024
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA [...]
debug3: load_hostkeys: loading entries for host "addressOfD" from file "/home/mobaxterm/.ssh/known_hosts"
debug3: load_hostkeys: found key type RSA in file /home/mobaxterm/.ssh/known_hosts:1
debug3: load_hostkeys: loaded 1 keys
debug1: Host 'addressOfD' is known and matches the RSA host key.
debug1: Found key in /home/mobaxterm/.ssh/known_hosts:1
debug2: bits set: 515/1024
debug1: ssh_rsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/mobaxterm/.ssh/id_rsa (0x20072e98), explicit
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug3: start over, passed a different list publickey,gssapi-keyex,gssapi-with-mic,password
debug3: preferred hostbased,publickey,password,keyboard-interactive
debug3: authmethod_lookup publickey
debug3: remaining preferred: password,keyboard-interactive
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/mobaxterm/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug2: input_userauth_pk_ok: fp [...]
debug3: sign_and_send_pubkey: RSA [...]
debug1: Enabling compression at level 6.

Здесь он останавливается на 22 секунды.

debug1: Authentication succeeded (publickey).
Authenticated to addressOfD (via proxy).
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug2: callback start
debug2: x11_get_proto: /bin/xauth  list :0.0 2>/dev/null
debug1: Requesting X11 forwarding with authentication spoofing.
debug2: channel 0: request x11-req confirm 1
debug2: client_session2_setup: id 0
debug2: channel 0: request pty-req confirm 1
debug2: channel 0: request shell confirm 1
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel_input_status_confirm: type 99 id 0
debug2: X11 forwarding request accepted on channel 0
debug2: channel_input_status_confirm: type 99 id 0
debug2: PTY allocation request accepted on channel 0
debug2: channel 0: rcvd adjust 2097152
debug2: channel_input_status_confirm: type 99 id 0
debug2: shell request accepted on channel 0

Изменить 2:

Я попытался установить конфигурацию ssh под Ubuntu 16.04 и не получил 24-секундную задержку (соединение было установлено менее чем за 2 секунды). Я скачал последнюю версию MobaXterm (v9.1), и только первое установление соединения было медленным. Я также протестировал MobaXterm на Windows 10 (до: Windows 7), тот же результат. Так что я думаю, что это проблема с Windows/MobaXterm или чем-то еще, что он использует под капотом.

Заключение:

Кажется, лучшее, что я могу сделать, - это перейти на Linux (немного излишне) или переслать ssh-агент (если мне повезет) или сесть и немного подождать. В обоих случаях мне нужно заранее загрузить ключ ssh, чтобы не вводить пароль дважды.

1 ответ1

2
  1. Мне нужно сначала загрузить ключ с помощью ssh-agent. В противном случае он дважды запрашивает пароль.

Тебе это не нужно. Если у вашего ключа есть пароль, это полезно.

  1. Требуется возраст (24 секунды) для подключения. Я должен упомянуть здесь, что я на Windows использую mobaXterm, на случай, если это будет отвечать за 24 секунды.

Подключение занимает некоторое время. Если вы хотите получить его быстрее (для отдельных подключений используйте опцию ControlMaster ).

 ProxyCommand ssh -A -W %h:%p C

Вам не нужен агент, пересылающий сюда. Аутентификация всегда выполняется с вашего локального компьютера.

 ForwardAgent yes

Ни здесь, если вы не хотите использовать свои ключи от сервера C

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .