Я пытаюсь настроить шлюз ssh. У меня есть физический хост (H) и несколько виртуальных машин на нем. Хост может подключаться по ssh к одной из виртуальных машин (A), а затем подключаться по ssh к другим с нее (назовем ее B). У меня это в .ssh/config
H
Host B
User foo
ProxyCommand ssh foo@A nc %h %p
Теперь, когда я ssh -vvv -l foo B
это делаю, H
я вижу эту ошибку:ssh_exchange_identification: Connection closed by remote host
cat /var/log/auth.log
на А говорит:
Jun 7 18:54:00 ubuntu sshd[846]: Received disconnect from 192.168.129.1: 11: disconnected by user
Jun 7 18:54:00 ubuntu sshd[834]: pam_unix(sshd:session): session closed for user foo
Jun 7 18:54:11 ubuntu sudo: foo : TTY=pts/6 ; PWD=/home/foo ; USER=root ; COMMAND=/usr/bin/tail /var/log/auth.log
Jun 7 18:54:11 ubuntu sudo: pam_unix(sudo:session): session opened for user root by foo(uid=30000)
/etc/hosts.allow
на
sshd: ALL
ssh: 0.0.0.0/0.0.0.0
Кажется, H говорит, что A закрыл соединение, а A говорит, что H закрыл соединение!
/etc/ssh/ssh_config
наH
Host *
SendEnv LANG LC_*
HashKnownHosts yes
GSSAPIAuthentication yes
GSSAPIDelegateCredentials no
Что еще может пойти не так?
решение1
Вы можете захотеть убедиться, что «Хост B» не должен включать A, если B — это шаблон, а не отдельный хост. Мне пришлось исключить A из шаблона явно.
Host *.example.com !gateway.example.com
ProxyCommand ssh -q -W %h:%p [email protected]
решение2
Попробуйте следующую конфигурацию на хосте H:
Host B
ProxyCommand ssh -q -W %h:%p A
У меня работает. Просто добавьте пользователя foo, если нужно:
Host B
User foo
ProxyCommand ssh -q -W %h:%p foo@A
И убедитесь, что пользователь foo существует на A и B.