如何在linux下配置ssh和sftp使用不同的端口号?

如何在linux下配置ssh和sftp使用不同的端口号?,第1张

1、两个deamon

要实现ssh和sftp分离,分别监听不同的端口,可以通过创建两个‘/usr/sbin/sshd’后台程序,一个监听22端口(ssh),一个监听20022端口(sftp),为了区分ssh和sftp服务的后台程序,这里将ssh服务的后台程序保持为/usr/sbin/sshd,而将sftp服务的后台程序改为/usr/sbin/sftpd。/usr/sbin/sftpd是/usr/sbin/sshd的一个链接,其内容完全相同(ln
-sf /usr/sbin/sshd /usr/sbin/sftpd)。

2、两个service

SLES12使用systemd管理系统服务,ssh服务对应/usr/lib/systemd/system/sshdservice文件,实现sftp服务时可以将/usr/lib/systemd/system/sshdservice
复制到
/etc/systemd/system/sftpdservice,然后修改sftpdservice文件内容。(使用修改好的sftpdservice文件即可)

3、其他文件
系统的ssh服务是通过安装openssh实现的,可以通过rpm -ql openssh查看该rpm包含哪些文件。总结实现ssh和sftp分离的相关的文件有:

ssh服务    sftp服务  

/usr/lib/systemd/system/sshdservice    /etc/systemd/system/sftpdservice 
(通过修改/usr/lib/systemd/system/sshdservice文件得到)  

/etc/pamd/sshd    /etc/pamd/sftpd (通过复制 /etc/pamd/sshd文件得到)  

/etc/ssh/sshd_config    /etc/ssh/sftpd_config (通过复制/etc/ssh/sshd_config文件得到)  

/usr/sbin/rcsshd    /usr/sbin/rcsftpd (ln -sf /usr/sbin/service /usr/sbin/rcsftpd)  

/usr/sbin/sshd    /usr/sbin/sftpd (ln -sf /usr/sbin/sshd /usr/sbin/sftpd)  

/etc/sysconfig/ssh    /etc/sysconfig/sftp (通过修改/etc/sysconfig/ssh文件得到)  

至此,我们已经实现了两个服务。

但是,ssh服务和sftp服务并没有真正的分离,此时已然可以通过22号端口使用ssh服务和sftp服务,而新开的20022端口也可以使用ssh服务(ssh
-p 20022 username@serverip )和sftp服务(sftp -o Port=20022
username@serverip )。

4、关闭22号端口下的sftp服务
编辑/usr/sbin/sshd的配置文件/etc/ssh/sshd_config文件,将Subsystem参数注释掉,然后重启sshd
同时也可以设置可访问22号端口的用户白名单:
编辑/etc/ssh/sshd_config文件,设置AllowGroups参数(假设设置为AllowGroups  sshonly),限制仅AllowGroups组内的用户可通过22号端口ssh登录系统(对于需要ssh登录系统的用户可通过usermod  -A  sshonly  <username>将其加入到AllowGroups组内)

5、“关闭20022号端口下的ssh服务”
sftp作为一个子服务,它的开启依赖于ssh服务,因此不能从本质上关闭ssh服务而只开启sftp服务。
可以用以下方式来规避:
/usr/sbin/sftpd的配置文件/etc/ssh/sftpd_config中包含Subsystem参数配置(推荐使用Subsystem  sftp  internal-sftp  -l  INFO  -f  AUTH)
/etc/ssh/sftpd_config中包含AllowGroups参数(假设为AllowGroups  sftponly),限制仅AllowGroups组内的用户可以访问20022端口
将AllowGroups组内的用户的shell改为/bin/false(usermod -s /bin/false  <username>),使AllowGroups组内的用户仅能sftp登录系统(如果一个用户即需要ssh,又需要sftp,则不能将其shell改为/bin/false)

6、用户白名单配置
配置之后,需将系统内需要ssh访问系统的用户加入到sshonly组内,需将系统内需要sftp访问系统的用户加入到sftponly组,同时需要ssh和sftp的用户则sshonly和sftponly组都要加入。

7、 重启ssh服务和sftp服务,并设置开机启动

service sshd restart
service sftpd restart

ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于,前者是针对客户端的配置文件,后者则是针对服务端的配置文件。两个配置文件都允许你通过设置不同的选项来改变客户端程序的运行方式。下面列出来的是两个配置文件中最重要的一些关键词,每一行为“关键词&值”的形式,其中“关键词”是忽略大小写的。

1、编辑 /etc/ssh/ssh_config 文件

Host
ForwardAgent no
ForwardX11 no
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
FallBackToRsh no
UseRsh no
BatchMode no
CheckHostIP yes
StrictHostKeyChecking no
IdentityFile ~/ssh/identity
Port 22
Cipher blowfish
EscapeChar

下面对上述选项参数逐进行解释:

带“#”表示该句为注释不起作,该句不属于配置文件原文,意在说明下面选项均为系统初始默认的选项。说明一下,实际配置文件中也有很多选项前面加有“#”注释,虽然表示不起作用,其实是说明此为系统默认的初始化设置。

Host
"Host"只对匹配后面字串的计算机有效,“ ”表示所有的计算机。从该项格式前置一些可以看出,这是一个类似于全局的选项,表示下面缩进的选项都适用于该设置,可以指定某计算机替换 号使下面选项只针对该算机器生效。

ForwardAgent no
"ForwardAgent"设置连接是否经过验证代理(如果存在)转发给远程计算机。

ForwardX11 no
"ForwardX11"设置X11连接是否被自动重定向到安全的通道和显示集(DISPLAY set)。

RhostsAuthentication no
"RhostsAuthentication"设置是否使用基于rhosts的安全验证。

RhostsRSAAuthentication no
"RhostsRSAAuthentication"设置是否使用用RSA算法的基于rhosts的安全验证。

RSAAuthentication yes
"RSAAuthentication"设置是否使用RSA算法进行安全验证。

PasswordAuthentication yes
"PasswordAuthentication"设置是否使用口令验证。

FallBackToRsh no
"FallBackToRsh"设置如果用ssh连接出现错误是否自动使用rsh,由于rsh并不安全,所以此选项应当设置为"no"。

UseRsh no
"UseRsh"设置是否在这台计算机上使用"rlogin/rsh",原因同上,设为"no"。

BatchMode no
"BatchMode":批处理模式,一般设为"no";如果设为"yes",交互式输入口令的提示将被禁止,这个选项对脚本文件和批处理任务十分有用。

CheckHostIP yes
"CheckHostIP"设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为"yes"。

StrictHostKeyChecking no
"StrictHostKeyChecking"如果设为"yes",ssh将不会自动把计算机的密匙加入"$HOME/ssh/known_hosts"文件,且一旦计算机的密匙发生了变化,就拒绝连接。

IdentityFile ~/ssh/identity
"IdentityFile"设置读取用户的RSA安全验证标识。

Port 22
"Port"设置连接到远程主机的端口,ssh默认端口为22。

Cipher blowfish
“Cipher”设置加密用的密钥,blowfish可以自己随意设置。

EscapeChar
“EscapeChar”设置escape字符。

2、编辑 /etc/ssh/sshd_config 文件:

下面逐行说明上面的选项设置:

Port 22
"Port"设置sshd监听的端口号。

ListenAddress 19216811
"ListenAddress”设置sshd服务器绑定的IP地址。

HostKey /etc/ssh/ssh_host_key
"HostKey”设置包含计算机私人密匙的文件。

ServerKeyBits 1024
"ServerKeyBits”定义服务器密匙的位数。

LoginGraceTime 600
"LoginGraceTime”设置如果用户不能成功登录,在切断连接之前服务器需要等待的时间(以秒为单位)。

KeyRegenerationInterval 3600
"KeyRegenerationInterval”设置在多少秒之后自动重新生成服务器的密匙(如果使用密匙)。重新生成密匙是为了防止用盗用的密匙解密被截获的信息。

PermitRootLogin no
"PermitRootLogin”设置是否允许root通过ssh登录。这个选项从安全角度来讲应设成"no"。

IgnoreRhosts yes
"IgnoreRhosts”设置验证的时候是否使用“rhosts”和“shosts”文件。

IgnoreUserKnownHosts yes
"IgnoreUserKnownHosts”设置ssh daemon是否在进行RhostsRSAAuthentication安全验证的时候忽略用户的"$HOME/ssh/known_hosts”

StrictModes yes
"StrictModes”设置ssh在接收登录请求之前是否检查用户家目录和rhosts文件的权限和所有权。这通常是必要的,因为新手经常会把自己的目录和文件设成任何人都有写权限。

X11Forwarding no
"X11Forwarding”设置是否允许X11转发。

PrintMotd yes
"PrintMotd”设置sshd是否在用户登录的时候显示“/etc/motd”中的信息。

SyslogFacility AUTH
"SyslogFacility”设置在记录来自sshd的消息的时候,是否给出“facility code”。

LogLevel INFO
"LogLevel”设置记录sshd日志消息的层次。INFO是一个好的选择。查看sshd的man帮助页,已获取更多的信息。

RhostsAuthentication no
"RhostsAuthentication”设置只用rhosts或“/etc/hostsequiv”进行安全验证是否已经足够了。

RhostsRSAAuthentication no
"RhostsRSA”设置是否允许用rhosts或“/etc/hostsequiv”加上RSA进行安全验证。

RSAAuthentication yes
"RSAAuthentication”设置是否允许只有RSA安全验证。

PasswordAuthentication yes
"PasswordAuthentication”设置是否允许口令验证。

PermitEmptyPasswords no
"PermitEmptyPasswords”设置是否允许用口令为空的帐号登录。

AllowUsers admin #限定登录的用户名
"AllowUsers”的后面可以跟任意的数量的用户名的匹配串,这些字符串用空格隔开。主机名可以是域名或IP地址。

服务端步骤如下:
编辑配置文件 /etc/ssh/sshd_config
vim /etc/ssh/sshd_config
找到 UseDNS选项,如果没有注释,将其注释

添加
UseDNS no

找到 GSSAPIAuthentication选项,如果没有注释,将其注释

添加
GSSAPIAuthentication no

保存配置文件

重启 OpenSSH服务器
/etc/initd/sshd restart

注意:

port 22

port 2345

一般ssh的默认端口为22
比如正常使用终端登录局域网电脑

注意是 sshd_config 文件

在#Port 22行去掉#号注释,同时加入想要使用的端口号如 Port 22438

这里保留22端口是为了防止当前无法使用ssh登录

成功返回success
重启防火墙:

成功返回success
查看添加端口是否成功,成功则显示yes,否则为no:

查看本机SELinux状态,如果是关闭则可以跳过此步骤

以下使用semanage *** 作,没有可以使用以下命令安装:

以下命令为查看当前SELinux允许的ssh端口:

添加22438端口到SELinux,并确认

测试新端口ssh连接

可以正常登录即成功

将之前开放的Port 22一行注释掉并保存

然后重启ssh

使用以下命令无法登录服务器

本机终端输入:

配置相关全部直接回车
在~/ssh/目录下生成两个文件

在本机终端输入:

在本机将认证文件复制到服务器

如果服务器上没有文件夹就新建一个ssh/文件夹

Enjoy

1、使用sftp默认的端口号进行登录

aiuap_cj@cuchc802:~> sftp aisftp@10124163133
aisftp@10124163133's password:
Connected to 10124163133
sftp>

备注:可以连接,但是并没有显示当前的端口号

2、使用-P 端口号的方式进行登录

aiuap_cj@cuchc802:~> sftp -P 21 aisftp@10124163133^Caiuap_cj@cuchc802:~> sftp -P 22 aisftp@10124163133aisftp@10124163133's password: Connected to 10124163133
sftp>

备注:发现21端口是无法连接的,使用22端口就能进行连接,所以,默认的sftp端口号22,同时呢,如果其他的sftp服务器的端口号修改之后,可以通过-P来指定要通过哪个端口号连接。

扩展资料

linux修改sftp端口的方法:

SSH配置文件有两个都放在/etc/ssh/ssh_config和/etc/ssh/sshd_config在ssh_config中,找到#port22,在其下面就加入port 8080;

同时,在sshd_config中,找到#port 22,在其下面就加入port8080(与上面相同)
之后重启sshservice sshd restart。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13182842.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-17
下一篇 2023-06-17

发表评论

登录后才能评论

评论列表(0条)

保存