当前位置: 首页>>技术教程>>正文


通过活动的SSH会话下载文件

,

问题描述

所以我从Ubuntu桌面SSH进入我的Ubuntu服务器。我处于某种特定的路径,我想将文件下载到本地文件系统(最好是我进入SSH会话之前的路径)。

我可以挂载SSH并通过鼠标拖动文件,但是如果我试图获取根文件并直接通过root登录会被禁止?即使情况并非如此(现在不是这样),当然必须有一种通过主动SSH连接拉回文件的简单方法。

一定!

最佳解决办法

您可能想要查看zssh,它在Universe中可用,因此可用

sudo apt-get install zssh

你需要在你的ubuntu服务器和你的客户机上,但基本上用zssh登录时,你只需点击’ctrl-@’,它就会启动“文件传输模式”,它允许你将文件传回管道到你的客户机,或者将它们从客户端上传到服务器。

但是,您不必re-auth或打开一个新的窗口scp。

如果你使用ssh密钥和ssh代理,你可以很容易地做到:

[enter]~[ctrl]-Z

其中将背景ssh,然后只是scp $!:/whatever/whatever .'

一旦文件被传输,fg即可获得ssh。

如果你没有使用ssh密钥,你仍然可以使用添加到最近的OpenSSh版本中的”ControlMaster”和”ControlPath”选项,但这会变得棘手,请检查man ssh_config

次佳解决办法

假设你在桌面上运行ssh服务器(有办法解决这个问题,但我认为它们都增加了复杂性,并且可能存在安全问题),你可以设置一个反向的ssh隧道。参见unix.SE上的SSH easily copy file to local system.

  • 键入Enter ~C Enter -R 22042:localhost:22 Enter创建从您的服务器到您的桌面的反向端口转发(22042可以是1024到65534之间未使用的任何端口号)。

  • 然后scp -P 22042 foo localhost:会将服务器上当前目录中的文件foo复制到桌面上的家中。

  • 现在通过输入Enter〜Ctrl + Z mv〜/foo将文件移动到桌面上的当前目录。输入fg回车。

Ssh escape sequences~开头;代字号仅在换行符后被识别。 ~ Ctrl+Z将ssh放入背景中。 ~C进入一个命令行,您可以在其中创建或删除转发。

第三种解决办法

我想出了一个用标准的ssh来做到这一点的方法。这是一个复制当前ssh连接的脚本,在远程机器上找到您的工作目录,并将指定的文件复制回本地计算机。它需要2个非常小的脚本(1个远程,1个本地)和2个线路在你的SSH配置。步骤如下:

  1. 将这2行添加到您的~/.ssh/config

    ControlMaster auto
    ControlPath ~/.ssh/socket-%r@%h:%p
    

    现在,如果你有一个打开machineX的ssh连接,你不需要密码来打开另一个。

  2. 在名为~/.grabCat.sh的远程计算机上创建一行脚本

    \#!/bin/bash<br>
    cat "$(pwdx $(pgrep -u $(whoami) bash) | grep -o '/.*' | tail -n 1)"/$1
    
  3. 在本地计算机上创建一个名为〜/.grab.sh的脚本

    \#!/bin/bash
    [ -n "$3" ] && dir="$3" || dir="."
    ssh "$1" ".grabCat.sh $2" > "$dir/$2"
    
  4. 并在(~/.bashrc或其他地方)中为grab.sh制作一个别名:

    alias grab=~/.grab.sh
    

就这样,一切都完成了。现在,如果您登录到machineX:/some/directory,只需启动一个新终端并键入

grab machineX filename

这将该文件放置在本地计算机上的当前工作目录中。您可以指定一个不同的位置作为”grab”的第三个参数。

注意:显然这两个脚本都必须是”executable”,即chmod u+x filename

第四种办法

如果您的客户端机器(您正在使用的机器)称为machineA,并且您正在使用SSH连接的机器称为机器B. MachineA,则您的本地机器必须运行SSHD并打开端口22。然后:

scp myfile machineA:

将MachineB上的myfile复制到machineA上我的MachineA主目录中。这假定用户ID /密码是相同的。

scp myfile machineA:/newdir/newname

在机器A上将myfile一台MachineB复制到/newdir/newname。这假定用户ID /密码是相同的。

scp MachineA:/path/to/my/otherfile . 

从MachineA的MachineA目录中获取otherfile的副本,并将其放入MachineB机器的当前工作目录中(由”dot”(。)字符以标准UNIX方式指定)。这假定用户ID /密码是相同的。

如果用户名/密码不相同,则使用:

scp myfile user@MachineA:获取文件。

scp user@MachineA:/path/to/my/otherfile .放置文件

关于SCP的注意事项:

就像cp命令一样,scp有一个-p选项,用于将原始文件的权限设置传播到副本(否则复制是使用新文件的正常设置进行的),以及用于复制整个目录树的-r选项用一个命令。

scp在两台机器之间创建一个完全透明的加密数据通道,因此二进制数据(如图像或可执行程序)可以正确保存。这也意味着scp无法在不同类型的操作系统之间执行自动end-of-line终端转换,就像在”ascii”模式下使用ftp所做的那样。在Unix系统之间进行复制时,这并不是问题,它们都使用相同的end-of-line约定。

第五种办法

如果你通过ssh访问服务器,你也可以通过sftp进行连接。方便地保存filezilla客户端(GUI)并粘贴当前所在的路径

ssh,ubuntu

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/777.html,未经允许,请勿转载。