Я часто SSH в кластерный узел для работы и после обработки хочу задержать несколько результатов к своей локальной машине для анализа. Как правило, чтобы сделать это я использую локальную оболочку для scp с сервера, но это требует большого управления путем. Я предпочел бы использовать синтаксис как интерактивный FTP и просто 'вытягивать' файлы от сервера до моего локального pwd.
Другое возможное решение могло бы состоять в том, чтобы иметь некоторый способ автоматически настроить мой клиентский компьютер как псевдоним ssh так, чтобы что-то как
scp results home:~/results
работал бы как ожидалось.
Там кто-либо - неясный прием SSH, это сделает это для меня?
Работая из ответа grawity, полное решение в файлах конфигурации - что-то как
локальный .ssh/config:
Host ex
HostName ssh.example.com
RemoteForward 10101 localhost:22
ssh.example.com .ssh/config:
Host home
HostName localhost
Port 10101
который позволяет мне сделать команды точно как
scp results home:
передача файла заканчивается к моей домашней машине.
Я предпочел бы использовать синтаксис как интерактивный FTP и просто 'вытягивать' файлы от сервера до моего локального pwd.
Использовать sftp
.
(Подсказка: Если Вы не можете или не хотеть открывать новое окно, можно приостановить соединение SSH путем нажатия Enter, ~, CtrlZ, передать файлы и возобновить SSH с fg
.)
Другое возможное решение могло бы состоять в том, чтобы иметь некоторый способ автоматически настроить мой клиентский компьютер как псевдоним ssh
Существует несколько путей.
Статический псевдоним для ssh
и scp
– добавьте это к Вашему ~/.ssh/config
:
Host home
# If you don't have a domain name, check out DynDNS...
# ...or just use your IP address.
Hostname homepc.somedomain.tld
# If necessary, uncomment:
#User john
#Port 1234
Использование:
scp foo home:
(Если Вы не обеспечиваете путь после :
, файл перейдет к Вашему корневому каталогу.)
Используйте SSH_CLIENT
переменная среды.
export client=${SSH_CLIENT%% *}
if [[ $client == *:* ]]; then
client="[$client]"
fi
Вставленный в это ~/.profile
или ~/.bash_profile
или везде, где Вы хотите, затем используйте $client
когда Вам нужен Ваш собственный адрес.
scp foo "$client:"
Смешайте обоих.
~/.ssh/config
:
Host client
ProxyCommand ~/bin/reverse-connect %p
~/bin/reverse-connect
:
#!/bin/sh
if [[ $SSH_CLIENT ]]; then
client=${SSH_CLIENT%% *}
else
echo "I don't know your address." >&2
exit 1
fi
if [[ $client == *:* ]]; then
client="[$client]"
fi
port=${1:-22}
exec socat - "tcp:$client:$port"
Использование:
scp foo client:
Вы попробовали sshfs? Это легко как
> sshfs hostname: mountpoint
и
fusermount -u mountpoint
и затем можно использовать все классические и основные команды управления файлом.
Вы могли использовать scp
от Вашего локального хоста. Используйте команду как scp server:file .
.
Ваши другие опции включают sftp
и sshfs
как уже отмечено.
Для всех них я использовал бы авторизованные ключи. Это более безопасно к паролю, защищают Ваш ключ. Я использую ssh-агент для обслуживания ключей к ssh по мере необходимости. Команда ssh-добавляет, предложит Вам пароль Вашего ключа и загрузит ключ в ssh-агент.