有没有一种方便的方法可以在 SSH 会话中从服务器提取文件?

有没有一种方便的方法可以在 SSH 会话中从服务器提取文件?

我经常通过 SSH 进入集群节点进行工作,处理后想将多个结果拉回本地机器进行分析。通常,为此我使用本地 shell 从服务器 scp,但这需要大量的路径操作。我更喜欢使用交互式 FTP 之类的语法,只需将文件从服务器“拉”到我的本地 pwd 即可。

另一个可能的解决方案是,通过某种方式自动将我的客户端计算机设置为 ssh 别名,以便

scp results home:~/results

将会按预期工作。

是否有一些不为人知的 SSH 技巧可以帮助我做到这一点?


工作于重力的答案,配置文件中的完整解决方案是这样的

本地.ssh/配置:

Host ex
    HostName ssh.example.com
    RemoteForward 10101 localhost:22

ssh.example.com .ssh/配置:

Host home
    HostName localhost
    Port 10101

这让我可以执行如下命令

scp results home:

将文件结果传输到我的家用机器。

答案1

我更喜欢使用像交互式 FTP 这样的语法,并将文件从服务器“拉”到我的本地密码。

使用sftp

(提示:如果您无法或不想打开新窗口,您可以按Enter~、暂停 SSH 连接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:
    

答案2

你试过 sshfs 吗?它很简单

> sshfs hostname: mountpoint

fusermount -u mountpoint

然后您可以使用所有经典和基本的文件操作命令。

http://en.wikipedia.org/wiki/SSHFS

http://fuse.sourceforge.net/sshfs.html

答案3

您可以scp从本地主机使用。使用类似 的命令scp server:file .

您的其他选择包括sftp并且sshfs如前所述。

对于所有这些,我都会使用授权密钥。使用密码保护密钥更安全。我使用 ssh-agent 根据需要将密钥提供给 ssh。命令 ssh-add 将提示您输入密钥的密码并将密钥加载到 ssh-agent 中。

相关内容