单独的 SSH 和 SFTP [关闭]
Posted
技术标签:
【中文标题】单独的 SSH 和 SFTP [关闭]【英文标题】:Separate SSH and SFTP [closed] 【发布时间】:2016-09-03 20:04:18 【问题描述】:SSH 和 SFTP 可以分开吗?
例如,SFTP 监听 22 端口,SSH 监听 2222 端口?
我已经分离了 SFTP 和 SSH 用户列表,目的是让 SFTP 用户连接到端口 22,并使 SSH 监听更高的端口,例如 2222。
由于两者本质上都是 SSH 的一部分,我无法找到实现此目的的方法。
提前致谢!
【问题讨论】:
这可能有用serverfault.com/questions/74176/what-port-does-sftp-use。因为它使用 ssh 运行,所以它们不能在不同的端口上。 【参考方案1】:其他问题是正确的,但您可以设置一个 openSSH 实例来监听两个端口并在一个端口上处理 SFTP 连接,在另一个端口上处理 SSH 连接:
Port 22
Port 2222
Subsystem sftp internal-sftp
Match LocalPort 22
ChrootDirectory /sftp/root/dir
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
【讨论】:
感谢您的回复 - 这个解决方案意味着用户仍然可以通过端口 22 连接到 SSH 服务器? 这就是我要避免的 :) 基本上,目标是分离 SSH 和 SFTP。目标是让 SSH 服务器仅在某个更高的端口(例如 2222)上侦听,而 SFTP 服务器仅在 22 上侦听,而在端口 22 上没有 SSH。 哦..我错过了你的评论。如果指定ForceCommand
,则无法正常使用ssh
。
@Igor 您可以在Match
块中使用多个关键字,例如Match LocalPort 22 Group sftpusers
@MarkStosberg 是的,这是一个错误。 Subsystem
需要位于 Match 块之外。我将编辑答案。但这并没有改变这个解决方案的功能。【参考方案2】:
添加在单独端口上运行的第二个实例肯定有效,但是您必须处理告诉用户使用另一个端口的问题 - 他们不会这样做。您还可以使用 match user
和 match group
行来强制用户和/或组仅使用 sftp。
在sshd-config
,你可以做类似的事情
Subsystem sftp internal-sftp
...
Match Group sftponly
ChrootDirectory /sftp/root/dir
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
另见Linux shell to restrict sftp users to their home directories?
【讨论】:
这可行,但如果 SSH 登录存在错误,它仍然会公开。例如,通过拆分端口,您可以使 SFTP 公开可用,但让 SSH 在非公开端口上运行,可能只能通过堡垒访问。这也有助于遵守从不直接公开 SSH 的政策。【参考方案3】:您可以这样做:
创建第二个/单独的 SSH 服务(这将根据您使用的初始化系统而有所不同);
并将其配置为only allow SFTP。您可能想chroot SFTP 服务,以防止用户使用某些技巧来取回 shell。
【讨论】:
以上是关于单独的 SSH 和 SFTP [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
有没有好的免费 .Net 网络库? (FTP、SFTP、SSH 等)[关闭]
CentOS的ssh sftp配置及权限设置(流程相当完整)(关闭了SElinux才能上传了)