我经常在 Ubuntu 终端中同时使用ssh
和。典型的工作流程如下:sftp
- 在单独的终端窗口上使用相同的公钥通过 SSH 和 SFTP 登录某些服务器。
- 使用 SSH 创建一个目录。
put
使用 SFTP 将一些文件放入目录中。chmod
通过SSH设置权限。
使用两个终端窗口进行所有这些操作可能有点烦人,因此,如果我可以使其看起来像是所有操作都发生在一个进程内,我会更希望如此。
我的问题是:
是否有充分的理由将
ssh
和sftp
流程分开?或者我继续编写一个将它们合并在一起的应用程序是否“安全”?
谢谢!
更新:看起来sftp
支持许多常见的终端命令。但是,它仍然不支持任何任意终端命令,就像 的情况一样ssh
。所以我仍然希望看到这些问题的答案,而不是为什么答案是不必要的理由。
答案1
没有“SSH 命令”之类的东西。那些是 shell 命令。对于 SSH 终端/客户端来说,shell 只是一个带有输入和输出的黑匣子。客户端甚至不明白你输入了一些命令,更不用说理解它们了。
所以,任何满足您要求的解决方案都必须针对特定的系统和外壳进行定制,以便能够理解您正在做的事情。
当然,如果您输入的命令是 shell 或 SFTP 命令,理论上的客户端可以有您用来指定的特定命令或前缀。与ftp
escape-to-local-shell 前缀/命令类似!
。
但即便如此,您可能仍难以匹配当前的工作目录。如果不是因为其他原因,那么是因为 SFTP 可以 chroot,而 shell 不能。请记住,SFTP 是一个独立的系统,理论上可能使用完全不同的文件系统表示。
因此结论是,这是可行的,但它涉及太多黑客攻击,并且与系统和 shell 密切相关,因此很难使系统通用。可靠的解决方案需要一些服务器端组件(如特殊类型的 shell)。
我知道我在写什么,因为我已经为我的 SFTP 客户端 WinSCP 实现了这一点。在 SFTP 会话中,你可以打开终端/控制台窗口,它启动一个 shell 会话并将其工作目录更改为当前 SFTP 工作目录(通过发送 shellcd
命令)。所以我知道这是多么不靠谱和不可靠。
答案2
用于sshfs
挂载远程文件系统。然后运行命令或复制文件,就像在本地系统上一样。请参阅系统的文档了解它的使用方法。
答案3
我不知道有任何东西可以将 sftp 和 ssh 真正地结合到您描述的单个界面中。如果不详细了解您希望从这样的客户端中看到什么,我无法给出更好的答案。
还有其他方法可以完成您描述的事情。
sftp 可以做到这一切
rbabchis@haze:~/tmp$ sftp localhost
rbabchis@localhost's password:
Connected to localhost.
sftp> mkdir test
sftp> cd test
sftp> put /home/rbabchis/chicken.JPG
Uploading /home/rbabchis/chicken.JPG to /home/rbabchis/test/chicken.JPG
/home/rbabchis/chicken.JPG 100% 2035KB 2.0MB/s 00:00
sftp> chmod 777 chicken.JPG
Changing mode on /home/rbabchis/test/chicken.JPG
sftp> quit
rbabchis@haze:~/tmp$
在 SSH 终端会话中进行传输
但如果谈论的是通过 SSH 在远程 bash 提示符下传输文件,我还没有看到标准的方法来做到这一点。不过,你的问题确实让我想起了 90 年代,当时我们使用了类似调制解调器通过终端会话进行传输。所以我用谷歌搜索了一下,看看我发现了什么。
检查一下(通过 ssh 使用 Zmodem):