SSH会话内便捷获取远程服务器文件的方法咨询
当然有办法解决这个麻烦!我之前也经常遇到要切终端输SFTP命令的困扰,下面几个实用方法可以让你在SSH会话里直接搞定文件下载:
使用Zmodem工具(最便捷的交互式方法)
很多终端工具(比如Xshell、SecureCRT)和主流Linux发行版都支持Zmodem协议,只需要在远程服务器上安装lrzsz包:Debian/Ubuntu系统用sudo apt install lrzsz,CentOS/RHEL系统用sudo yum install lrzsz。安装完成后,在SSH会话里直接运行sz /path/to/your/file,本地终端会自动弹出文件保存对话框,确认后就能把文件拉到本地,完全不用切终端!用SSH管道直接传输
如果不想装额外工具,可以在远程SSH会话里执行类似这样的命令,把文件通过SSH管道传到本地:cat /path/to/your/file | ssh your_local_username@your_local_ip "cat > /local/path/to/save/file"这里需要注意本地机器要能被远程服务器访问(或者提前在本地开反向SSH隧道),如果没配SSH密钥的话,还需要输入本地机器的登录密码。
自定义别名简化操作
如果你经常有这个需求,可以在远程服务器的~/.bashrc或~/.zshrc里加一个自定义别名,比如:alias getfile='function _getfile() { cat "$1" | ssh your_local_user@your_local_ip "cat > ~/downloads/$(basename $1)"; }; _getfile'保存后执行
source ~/.bashrc生效,之后在SSH会话里直接输getfile /path/to/file,就能自动把文件传到本地的~/downloads目录下。要是提前配好本地和远程的SSH密钥免密登录,连密码都不用输。
另外补充下,如果你用的是iTerm2这类现代终端,只要在本地装lrzsz并配置好终端触发脚本,也能和远程的sz命令完美配合,体验非常流畅。
备注:内容来源于stack exchange,提问作者Hiccup

