我最近尝试使用sftp来访问我的linux盒子,在那里我实现了一个我自己的简单shell.我设置除root之外的用户默认使用mine shell(通过编辑/ etc/passwd文件).然后出现问题,一旦我尝试通过sftp访问,我将收到一条消息"收到的消息太长了:",我搜索了解决方案,一个解决方案是将此用户的默认shell更改回正常的bash shell.我试过这样,它有效,问题是有没有办法,我仍然可以使用自己的shell,并允许sftp通过?请回答我更详细的信息,比如我应该去编辑哪个文件等.先谢谢:)
sal*_*lva 18
配置服务器以使用内部sftp服务器将以下指令添加到/etc/ssh/sshd_config:
Subsystem sftp internal-sftp
Run Code Online (Sandbox Code Playgroud)
这样,它就不会使用用户shell来启动sftp服务器程序.
“Received message too long”表示您的 SFTP 客户端从 SFTP 服务器接收到错误数据。典型的原因是服务器上的 shell 启动脚本(.bashrc、.profile、.cshrc 等)正在生成一些输出,而您的 SFTP 客户端正在尝试将该输出解析为 SFTP 消息。您可以通过运行以下命令来检查这一点:
ssh user@remote 'echo hello'
Run Code Online (Sandbox Code Playgroud)
如果这会产生除“hello”之外的任何输出,那么该输出可能会阻止 SFTP 或 SCP 正常工作。
正如在 Salva 的回答中一样,您可以通过将 SSH 服务器设置为对 SFTP 会话使用internal-sftp来避免这种情况。这避免了为 SFTP 会话启动 shell。这对 SCP 或其他程序(如通过 ssh 运行的 git 或 rsync)没有帮助。
解决此问题的另一种方法是检查您的 shell 启动命令,找出产生输出的原因,并防止在非交互式 SSH 会话期间发生这种情况。一个技巧是在运行产生输出的命令之前测试 TTY:
if [ -t 1 ]; then
# standard output is a TTY
...
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11730 次 |
| 最近记录: |