Как смонтировать удаленный SSHFS через промежуточный компьютер? Туннелирование?
Я хотел бы смонтировать удаленную файловую систему (A) с использованием SSHFS, но иногда у меня есть IP-адрес, доступ с которого не разрешен. Поэтому я планирую получить к нему доступ через другую машину (B) в этой сети. Нужно ли монтировать A на B, а затем монтировать B (и A) на моем локальном компьютере? Есть ли лучший способ сделать это?
Обновить
Просто чтобы уточнить процедуру:
Сначала я делаю туннель
ssh -f user@machineB -L MYPORT:machineA:22 -N
А потом я монтирую удаленную файловую систему
sshfs -p MYPORT user@127.0.0.1:/myremotepath /mylocalpath
Это правильно?
Как мне разрушить туннель, когда я закончу?
4 ответа
Да туннелирование Вы подключаете машину B, создаете локальный туннель (-L) к SSHd-порту машины A, затем sshfs к localhost к порту вновь созданного туннеля.
Вы можете использовать опцию ssh_command
из sshfs
сделать трюк:
sshfs ma: /mnt -o ssh_command='ssh -t mb ssh'
Размонтировать с обычным
fusermount -u /mnt
Извините, это на 7 лет позже...
У меня это работает на HighSierra 10.13.6, SHFS версии 2.5 (OSXFUSE SSHFS 2.5.0) OSXFUSE 3.10.4. Версия библиотеки FUSE: 2.9.7
На основе ответа Родриго Фариаса выше + комментарии Клемиша и Охада Рубина за замечание опции -J:
sshfs -p port finalserver_username@finalserver:/path/to/folder/on/finalserver/ /local/mount/point -o ssh_command='ssh -J intermediate_server_username@intermediate_server:port'
Ваша схема подключения:Your machine --> Host B --> Host A
В нашем решении будет использоваться Proxy Jump, представленный в OpenSSH 7.3, поэтому вам нужно проверить, что ваша версия новее:
ssh -V
Затем вам нужно правильно настроить ~/.ssh/config. Например, если machineB доступен с паролем, войдите с машины A:
machineB
HostName {machineB ip address}
User {machineB username}
Port {machineB port-number}
IdentityFile ~/.ssh/{machineB private ssh key}
machineA
ProxyJump machineB
Hostname {machineA ip address, maybe in local network}
User {machineA username}
Port {machineA port-number}
Наконец, создайте точку монтирования и добавьте строку в /etc/fstab
machineB:{machineB mount path} {your local mountpoint} fuse.sshfs delay_connect,_netdev,user,idmap=user,follow_symlinks,identityfile={local path to machineB private key},default_permissions,uid={local user uid},gid={local user gid} 0 0