我知道如何使用scp或wget将远程服务器上的文件下载到本地机器上。 但是,如果我已经用sshlogin到服务器,是否有一个命令让我下载服务器上的pwd文件到我的本地机器上?
我想我可以使用scp,但是我的本地机器通常在路由器后面。 我需要在路由器上打开一个端口吗?
你需要回答的是为什么你不想再次login…如果你login一次,你可以login两次,尤其是如果你已经花了三分钟的时间来创build一个密钥并远程存储密钥:
$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/user/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user/.ssh/id_rsa. Your public key has been saved in /home/user/.ssh/id_rsa.pub. The key fingerprint is: 2b:4c:11:ab:53:d1:15:90:4f:88:a1:42:da:c5:1c:98 user@localhost $ ssh-copy-id user@remotehost Warning: Permanently added 'remotehost' (RSA) to the list of known hosts. Password: $ ssh user@remotehost Last login: Mon Dec 14 21:52:45 2009 from 1.2.3.4 [user@remotehost] $
在TCP / IP普及之前的时代,人们使用X / Modem之类的工具来处理这个问题。 现在用这个有点傻。
这有点陈旧,但是你可以使用类似kermit的东西来使用调制解调器协议(zmodem等)。 看起来有一个专门为此目的而devise的程序 。
我曾经需要从远程unix服务器上下载一个small-ish文件,而不需要任何支持工具,所以我对这个文件进行了编码,把它转移到了terminal,然后用我的本地terminal程序捕获了结果文本,它。 生病,呃? 🙂
SCP是这项工作的正确工具。 只需从本地机器启动scp,所以你可以使用:
scp user @ remotehost:/ path / to / file / filename〜/
…将文件放在您的主目录中的本地框中。
如果你想要点和点击选项,你可以使用Konqueror和鱼协议。 只要打开Konqueror并在地址栏中inputfish:// user @ remote,用户就是您想要login的用户,而远程用户是远程计算机。
我想出了一个使用标准ssh客户端的方法。 这是一个复制当前ssh连接的脚本,在远程机器上find你的工作目录,并将指定的文件复制回本地机器。 它需要2个非常小的脚本(1远程,1本地)和2行在您的SSHconfiguration。 步骤如下:
1)将这两行添加到你的〜/ .ssh / config中
ControlMaster自动
ControlPath〜/.ssh/socket-%r@%h:%p
现在,如果你有一个ssh连接到machineX打开,你不需要密码来打开另一个。
2)在远程计算机上创build一个名为〜/ .grabCat.sh的单行脚本
#!/斌/庆典
cat“$(pwdx $(pgrep -u $(whoami)bash)| grep -o'/.*'| tail -n 1)”/ $ 1
3)在本地机器上创build一个名为〜/ .grab.sh的脚本
#!/斌/庆典
[-n“$ 3”] && dir =“$ 3”|| DIR = “”。
ssh“$ 1”“.grabCat.sh $ 2”>“$ dir / $ 2”
4),并在(〜/ .bashrc或其他地方)别名grab.sh中别名grab =〜/ .grab.sh
就这样,一切都完成了。 从现在开始,如果您login到“machineX:/ some / directory”,只需启动一个新的terminal并键入
抓住机器的X文件名
这将该文件放在当前机器上的当前工作目录中。 您可以指定一个不同的位置作为“抓取”的第三个参数。
注意:显然这两个脚本都必须是“可执行的”,即chmod u + x filename
一种方法是在你build立到远程机器的初始SSH连接时设置端口转发。 做这个:
$ ssh -L 9999:remote:22 remote
远程是远程机器的名称。
然后在你的本地机器上的一个单独的terminal,你可以这样做:
$ scp -p 9999 localhost:somefile somefile
从远程计算机复制文件,通过步骤1中的现有ssh连接返回到您的计算机。
我意识到这并不完全回答你的问题,但我希望它给你一些如何去做这个想法。 阅读关于ssh端口转发的更多详细信息。