Я не могу sftp непосредственно в конкретный хост. Для перемещения файла от моей домашней машины до хоста я должен sftp файл к промежуточному хосту; ssh в промежуточный хост; и sftp файл конечному месту назначения. Действительно ли возможно избежать такого безумия?
От Вашей локальной машины можно создать, туннель SSH через промежуточный хост заключительного хоста:
ssh user@intermediate -L 2000:final:22 -N
Это откроет порт 2000 на Вашем localhost, который соединится непосредственно с заключительным сервером на порте 22 путем туннелирования через промежуточный хост. Теперь в другом быстром подключении с sftp на порте 2000, который будет туннелирован до заключительного сервера, отмечая, что пользователь, указанный здесь, для заключительного хоста:
sftp -P 2000 user@localhost
Кажется, что это принадлежит на superuser.com или serverfault.com все же.
Можно передать данные по каналу к процессу ssh, работающему машине, затем выполнить команду на промежуточной машине, которая читает stdin и отправляет его в sftp как соответствующий.
Это может быть сделано в остроте на Вашей локальной машине, хотя заключение в кавычки аргументов ssh потребует ухода. Я говорю, по телефону прямо сейчас поэтому, к сожалению, не может ввести детали. Возможно, кто-то еще может завершить этот ответ как осуществление!
Я предполагаю, что заключительный хост является firewalled, и я могу только предположить методы, которые Вы могли использовать для обхождения его.
Например - выставляют ssh от Вашей локальной машины, затем ssh к первому хосту, затем ssh к второму и sftp с заключительного хоста на Вашу машину.
Можно использовать опцию 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...
позволяет говорят, что A и B являются первыми и вторыми хостами. И файл, который будет скопирован, является нечто
Вместо sftp можно использовать следующее
нечто кошки | ssh "кошка-> нечто"
Теперь, можно объединить 2 в гирляндную цепь из них вместе
нечто кошки | ssh "кошка - | ssh B \"кошка-> нечто \""