Мне нужно загрузить и скомпилировать данные на удаленном компьютере, который доступен только в определенной сети, к которой я могу получить доступ через SSH.
Так, например, я выполняю следующие шаги:
me@mymachine$ ssh user@network_gateway
user@network_gateway$ ssh seconduser@targetmachine
seconduser@targetmachine$ #do stuff
Есть ли способ заставить мою локальную машину знать о туннелировании, не испытывая проблем с подключением к сетевому шлюзу каждый раз?
Вы можете настроить свой .ssh/config
для автоматического создания туннеля для targetmachine
. Однако для того, чтобы это работало без пароля, вам необходимо настроить аутентификацию с открытым ключом на обоих хостах и пересылку агента на шлюзе.
Настройте его так, чтобы подключение к targetmachine
проксируется через network_gateway
:
Host targetmachine
HostName targetmachine.company.com
ProxyCommand ssh network_gateway -W %h:%p
Тогда можно оформить:
$ ssh targetmachine
для подключения напрямую. Больше информации в ssh_config(5)
справочная страница.
SSH примет команду для выполнения на удаленном компьютере. Например, для SSH на server2 через server1:
ssh alice@server1 "ssh bob@server2"
После этого вы сможете вводить команды в командной строке server2.
Если вы хотите получить еще больше фантазии, вы можете вложить их:
ssh alice@server1 "ssh bob@server2 \"cd myproject && git pull origin master && make all\""
Вы можете использовать сценарий вроде ssh-цепочка чтобы облегчить тебе жизнь.
Не знаю, поддерживает ли он передачу sftp.