Автоматизировать SSH и SCP с несколькими прыжками с помощью паролей

452
Tendero

Я хочу получить доступ к некоторому хосту с моего персонального компьютера, но сначала я должен получить доступ к промежуточному серверу, потому что конечный пункт назначения не виден из общедоступного Интернета.

Дело в том, что я должен сделать следующее, чтобы получить доступ к финальному хосту. С моего компьютера:

ssh username@server 

И введите пароль. Как только я там

ssh username2@finalhost 

И введите другой пароль.

Это довольно громоздко, особенно при этом scp, потому что мне нужно скопировать файл на промежуточный сервер, прежде чем я смогу скопировать его на конечный хост.

Есть ли способ сделать этот процесс автоматическим, как для, так sshи для scpкоманд?

0

2 ответа на вопрос

4
jjlin

Если у вас OpenSSH 7.3 или более поздняя версия, вы можете использовать ProxyJump в конфигурации клиента SSH для указания хостов перехода.

Например, отредактируйте ~/.ssh/configи добавьте

Host finalhost HostName finalhost.example.com User username2 ProxyJump username@server 

Сейчас ssh finalhostили scp file.txt finalhost:.должен пройти через хост хоста.

Извините за мое невежество, я довольно новичок в этом. Но где в этом файле указаны пароли? Разве они не должны быть вовлечены в автоматизацию доступа? Tendero 6 лет назад 0
@Tendero ProxyJump не хранит пароли, он автоматизирует процесс подключения через промежуточный («прыжковый») хост. Вы запускаете что-то вроде `ssh finalhost` или` scp localsource finalhost: destination`, и он автоматически подключается * через * хост перехода к конечному хосту. Но он все равно попросит вас ввести оба пароля. Если вы хотите избежать запросов на ввод пароля, лучше всего использовать [аутентификацию с открытым ключом] (https://www.ssh.com/ssh/public-key-authentication) вместо хранения паролей. Gordon Davisson 6 лет назад 3
@Tendero Если вы действительно должны использовать пароли, вы можете добавить что-то вроде [sshpass] (https://sourceforge.net/projects/sshpass/) в микс, хотя я не знаю, как это работает два пароля. Но, как сказал Гордон Дэвиссон, в любом случае лучше использовать auth pubkey. jjlin 6 лет назад 0
@GordonDavisson У меня нет возможности настраивать какие-либо компьютеры, к которым я подключаюсь при выполнении `ssh`, они являются и сервером, и хостом в моем университете, и все, что у меня есть, - это пароль для доступа к ним. Учитывая, что это так, все еще возможно использовать упомянутую вами аутентификацию с открытым ключом? (Я не знаю, что это такое, я прочитаю через пару часов, чтобы узнать, о чем это.) Tendero 6 лет назад 0
@Tendero Аутентификация с открытым ключом требует установки открытого ключа на сервере (и соответствующего закрытого ключа на вашем клиенте). Можете ли вы сделать это хотя бы на промежуточном хосте и сохранить одну запись пароля? Идея небезопасного хранения паролей сервера (например, в скрипте) заставляет мои зубы болеть, поэтому взгляните на опцию [sshpass] (https://sourceforge.net/projects/sshpass/), упомянутую jjlin. Gordon Davisson 6 лет назад 1
Кстати, если вы делаете серию подключений к одному и тому же хосту, другой способ сократить количество раз, когда вам нужно вводить пароли, - это использовать [master connection] (https://www.linuxjournal.com/content / скорость и множество SSH-соединения-же-сервер). При этом вы один раз подключитесь к серверу ssh, оставите это соединение открытым, а затем, пока оно там, вы можете использовать дополнительные соединения ssh и scp без необходимости повторной аутентификации. Gordon Davisson 6 лет назад 0
@GordonDavisson Я не возражаю против небезопасного хранения паролей, мой компьютер действительно не доступен никому, кроме меня, а сервер и конечный хост просто используются для экспериментов с подобными вещами. Так что это не значит, что есть какая-то важная информация, которая может быть просочена (или что даже есть вероятность того, что кто-то узнает пароли из-за того, что я храню их в скрипте). Можно ли автоматизировать процесс с учетом этого? Tendero 6 лет назад 0
0
gmathio

Вот короткий блок ~ / .ssh / config, который выполнит трик (даже для старых версий ssh):

Host server User username  Host finalhost User username2 ProxyCommand ssh server -W %h:%p 

Вы объявляете 2 хоста, средний сервер и конечный хост. Соединение ssh с сервером напрямую с пользователем и хостом, указанным в конфигурации. Соединение с конечным хостом выполняет переход на сервер, как указано в строке ProxyCommand .

Два магических параметра % h и % p используются для пересылки текущего Host = finalhost и текущего порта = 22 (по умолчанию)

Во-вторых, чтобы запретить ввод пароля при каждом подключении к этим машинам, вы можете использовать команду ssh-copy-id :

ssh-copy-id server <type server password for the last time>  ssh-copy-id finalhost <type finalhost password for the last time> 

Чтобы это работало, вам необходимо сгенерировать пару открытый-закрытый ключ, предварительно используя ssh-keygen . Вы можете проверить, есть они или нет, они уже существуют в папке ~ / .ssh (id_rsa.pub & id_rsa)

Похожие вопросы