Как смонтировать удаленный 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
Другие вопросы по тегам