问题描述
所以我从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配置。步骤如下:
-
将这2行添加到您的
~/.ssh/config
:ControlMaster auto ControlPath ~/.ssh/socket-%r@%h:%p
现在,如果你有一个打开machineX的ssh连接,你不需要密码来打开另一个。
-
在名为
~/.grabCat.sh
的远程计算机上创建一行脚本\#!/bin/bash<br> cat "$(pwdx $(pgrep -u $(whoami) bash) | grep -o '/.*' | tail -n 1)"/$1
-
在本地计算机上创建一个名为〜/.grab.sh的脚本
\#!/bin/bash [ -n "$3" ] && dir="$3" || dir="." ssh "$1" ".grabCat.sh $2" > "$dir/$2"
-
并在(
~/.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)并粘贴当前所在的路径