Должен я sftp к промежуточному серверу?

Я не могу sftp непосредственно в конкретный хост. Для перемещения файла от моей домашней машины до хоста я должен sftp файл к промежуточному хосту; ssh в промежуточный хост; и sftp файл конечному месту назначения. Действительно ли возможно избежать такого безумия?

11
задан 27.03.2011, 00:24

5 ответов

От Вашей локальной машины можно создать, туннель SSH через промежуточный хост заключительного хоста:

ssh user@intermediate -L 2000:final:22 -N

Это откроет порт 2000 на Вашем localhost, который соединится непосредственно с заключительным сервером на порте 22 путем туннелирования через промежуточный хост. Теперь в другом быстром подключении с sftp на порте 2000, который будет туннелирован до заключительного сервера, отмечая, что пользователь, указанный здесь, для заключительного хоста:

sftp -P 2000 user@localhost

Кажется, что это принадлежит на superuser.com или serverfault.com все же.

28
ответ дан 07.12.2019, 12:10

Можно передать данные по каналу к процессу ssh, работающему машине, затем выполнить команду на промежуточной машине, которая читает stdin и отправляет его в sftp как соответствующий.

Это может быть сделано в остроте на Вашей локальной машине, хотя заключение в кавычки аргументов ssh потребует ухода. Я говорю, по телефону прямо сейчас поэтому, к сожалению, не может ввести детали. Возможно, кто-то еще может завершить этот ответ как осуществление!

3
ответ дан 07.12.2019, 12:10

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

Например - выставляют ssh от Вашей локальной машины, затем ssh к первому хосту, затем ssh к второму и sftp с заключительного хоста на Вашу машину.

0
ответ дан 07.12.2019, 12:10

Можно использовать опцию ProxyCommand SFTP прозрачно туннелировать соединение SFTP по соединению SSH (немного подобный ответу WhiteFang34, но по stdin&stdout соединения SSH, а не переданному локальному порту TCP):

sftp -o "ProxyCommand=ssh -e none user@intermediatehost exec /usr/bin/nc %h %p 2>/dev/null" user@finalhost

(Это предполагает, что промежуточный хост имеет netcat, установленный как/usr/bin/nc - в противном случае Вам, вероятно, придется найти/установить некоторый эквивалентный способ gatewaying stdin&stdout в сеанс TCP.)

То, что действительно прохладно об этой опции, - то, что можно добавить его к ~/.ssh/config файл, который делает это прозрачным:

Host finalhost
    ProxyCommand ssh -e none user@intermediatehost exec nc %h %p 2>/dev/null

С той записью можно использовать sftp, scp, и ssh к finalhost, и это автоматически вызовет туннель. Единственная непрозрачная часть - то, что это запросит два пароля (intermediatehost сопровождаемый finalhost), но если Вы хотите Вас, может устранить это также с парами ключей SSH...

14
ответ дан 07.12.2019, 12:10

позволяет говорят, что A и B являются первыми и вторыми хостами. И файл, который будет скопирован, является нечто

Вместо sftp можно использовать следующее

нечто кошки | ssh "кошка-> нечто"

Теперь, можно объединить 2 в гирляндную цепь из них вместе

нечто кошки | ssh "кошка - | ssh B \"кошка-> нечто \""

0
ответ дан 07.12.2019, 12:10

Теги

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