Linux中ssh远程登录服务

Linux中的ssh服务是一种远程连接服务,主要用于远程登录Linux,ssh全称为Secure Shell Protocol即安全外壳协议,其由客户端和服务端组成,客户端一般有Xshell、SecureCRT、Putty等软件,服务端是openSSH,SSH服务是一个守护进程,在Linux后台实时监听来自客户端的请求,sshd就是SSH服务的进程名称。

SSH的认证类型

1、基于口令的认证
这种认证方式最常见,即客户端通过账号密码和IP地址来连接Linux服务器主机,虽然所传输的数据都是加密的,但是这种方式存在一定的风险,可能你连接的服务器并非真正所需连接的服务器,而是黑客利用技术手段冒充的。
2、基于密钥的认证
这种方式比较安全,需要依靠密钥,也就是事先需要在客户端创建一对密钥,并将公钥存放在要访问的服务器上,将私钥存放在SSH客户端主机上。
客户端向远程服务器发出连接请求,请求使用密钥进行安全验证,远程服务器收到请求后会先在SSH连接用户的家目录下查找事先存放的公钥,然后

SSH服务的安装与启动

查看是否安装了ssh服务:rpm -qa |grep openssh,显示有结果则表示已经安装了ssh服务;
如果没有返回值则需要安装ssh服务:yum install openssh-server
查看sshd服务状态:systemctl status sshd
查看端口检查sshd是否启动:netstat -lntup | grpe sshd
停止sshd服务:systemctl stop sshd 停止了sshd服务,远程连接就会连接不进来
启动sshd服务:systemctl start sshd
为了能让远程连接Linux,应该将sshd设为开机自启动:systemctl enable sshd

使用SSH连接远程主机

使用SSH服务在Linux系统中连接远程主机的命令:ssh -p 端口 用户名@远程主机名/IP地址

scp远程复制命令

scp远程复制命令是ssh服务的附带命令,其格式为:scp [参数] -P[port] 文件 用户@远程主机名/IP地址:目标目录
scp常用的2个参数:
-r 复制目录
-p 复制时保留文件或目录的属性
例如:scp -r -p -P22 nginx-1.80-63 [email protected]:/root/temp/
scp命令对于内网主机之间复制文件效率较高。

SSH免密登录实战

测试环境:两台Linux服务器,一台为分发服务器(CentOS),另一台为目标节点服务器(fujiseiko)
登录分发服务器,生成密钥对:ssh-keygen -t rsa
在这里插入图片描述
从命令结构来看,密钥对已生成。

现在把公钥分发给目标服务器
使用命令:ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
在这里插入图片描述
现在登录目标服务器fujiseiko查看是否分发成功,在root的家目录已存在一个叫/root/.ssh/authorized_keys的文件,该文件就是存放公钥的文件,如下图所示:
在这里插入图片描述
现在测试免密登录:在客户机上输入:ssh [email protected] 后发现已经连接上了,不用输入密码。
如果发现仍需要输入密码,则表示密钥免密登录失败,去到目标服务器fujiseiko,修改 vim /etc/ssh/sshd_config文件,启用 PubkeyAuthentication yes StrictModes yes AuthorizedKeysFile .ssh/authorized_keys
重新测试免密登录,同时CentOS中ssh的输出日志为:tail -fn700 /var/log/secure,可查看日志追踪错误。
笔者在首次产生密钥时使用:ssh-keygen -t rsa 即产生RSA密钥,也成功分发给目标节点服务器fujiseiko了,在客户机上测试发现总是提示要输入密码,追踪日志文件tail -fn700 /var/log/secure也没发现任何错误。百度上有人说是目录权限不足,但是我使用ssh-keygen -t rsa和ssh-keygen -t ecdsa都没有问题都能免密登录,就是使用dsa不行,最后再次检查配置文件,发现默认情况下配置文件是不启用这一项的:
在这里插入图片描述
查看该ssh目录下真的没有ssh_host_dsa_key这个文件,后来即使笔者启用这一项,还是没能免密登录,最后查看官网得知,

在这里插入图片描述
即OpenSSH 7.0版本之后已经不再支持DSA了,所以还是使用官网建议的rsa、ecdsa、ed25519吧,查看自己的openssh版本:rpm -qa|grep openssh-* 或 ssh -V 。

配置文件详解

SSH服务最主要的两个配置文件就是:/etc/ssh/ssh_config 和 /etc/ssh/sshd_config
下面先讲ssh_config
ssh_config是客户端文件
Host * //只匹配设定的主机,**表示匹配所有的主机
ForwardAgent no //指定是否将到身份验证代理的连接(如果有的话)转发到远程机器。
ForwardX11 no //指定是否在安全通道上自动重定向X11连接并显示参数必须是yes或no(默认值)。
PasswordAuthentication yes //是否使用密码认证
BatchMode no //是否禁用密码查询功能
CheckHostIP yes //验证主机IP,检查known_hosts中主机IP地址,检测主机密钥是否因DNS欺骗而改变,并添加目的地址~ /主机
AddressFamily any //指定连接时使用的地址族,IPV4和IPV6协议家族用哪个,any表示二者均用
ConnectTimeout 0 //指定连接SSH服务器时使用的超时时间(以秒为单位),而不是使用默认值系统TCP超时
StrictHostKeyChecking ask
IdentityFile ~/.ssh/id_rsa //指定从其中读取用户的DSA、ECDSA、Ed25519或RSA身份验证标识的文件。
IdentityFile ~/.ssh/id_dsa
IdentityFile ~/.ssh/id_ecdsa
IdentityFile ~/.ssh/id_ed25519
Port 22 // 连接远程主机的端口,默认22
EscapeChar ~ //设置转义字符(默认为’ ~ '),转义字符也可以在命令行中设置。
PermitLocalCommand no //是否允许通过LocalCommand选项或使用!命令转义序列执行本地命令

sshd_config是客户端文件
Port 22 //ssh监听端口,默认22,可以设置多个监听端口号,可重复使用Prot这个设置项。修改后重启sshd,防火墙中添加端口
AddressFamily any //指定连接时使用的地址族,IPV4和IPV6协议家族用哪个,any表示二者均用
ListenAddress 0.0.0.0 //设置sshd服务器监听的IP地址,0.0.0.0表示本机的所有Ipv4地址 【默认可修改】
ListenAddress :: // 指明监听的IPV6的所有地址格式
HostKey /etc/ssh/ssh_host_rsa_key // rsa私钥认证 【默认】
HostKey /etc/ssh/ssh_host_ecdsa_key //ecdsa私钥认证
HostKey /etc/ssh/ssh_host_ed25519_key //ed25519私钥认证
SyslogFacility AUTHPRIV //ssh登录系统时,ssh会记录信息,记录类型为AUTHPRIV,sshd服务日志存放在/var/log/secure
LogLevel INFO //日志级别,Centos的日志存放在/var/log/sercue中
PermitRootLogin yes //是否允许root远程登录,默认允许,但建议设置为no
StrictModes yes //是否让sshd去检查用户主目录或相关文件的权限数据
MaxAuthTries 6 //最大认证尝试次数,最多可以尝试6次输入密码。之后需要等待某段时间后才能再次输入密码
MaxSessions 10 //允许的最大会话数
AuthorizedKeysFile .ssh/authorized_keys //默认公钥存放的位置
PasswordAuthentication yes //是否允许支持基于密码口令的认证,可以设置为no不使用密码验证,转而使用密钥登录
PermitEmptyPasswords no //是否允许用户空密码登录
PrintMotd no //是否打印登录提示信息,提示信息存储在etc/motd文件中
PrintLastLog yes //显示上次登录信息。默认为yes
UseDNS no //一般为了判断客户端来源是否合法,会使用DNS去反查客户端的主机名。但通常在内网互连时,设置为no,使连接快写
PidFile /var/run/sshd.pid //sshd服务的PID文件

猜你喜欢

转载自blog.csdn.net/MssGuo/article/details/114297424