OpenSSH
ssh:Secure SHell,
telnet(安全缺陷)→ssh v1(安全缺陷)→ssh v2
ssh工作在TCP/IP的第五层,属于应用层协议,所以这个服务可以跨平台使,形同http服务一样。
ssh服务分为服务器端的sshd和客户端的ssh。
windows ssh client:
Xmanger→Xshell ,较流行
Securecrt
putty
sshclient
OpenSSH的用户认证:
基于口令的认证:username/passwd
基于密钥的认证:username
基于口令的认证:
在客户端第一次向服务器发起请求时:
1、客户端向服务器端发起请求。
2、服务器端会发送一个主机公钥(还有服务器的特征信息)到客户端。
客户端接受主机公钥后,就表明认可此服务器。
3、客户端生成一个一次性密钥到服务器端。
4、服务器端下面就通过对称密钥的方式索要密码。
注:客户端与服务器端连接后,
在客户端的家目录下面会生成".ssh"的隐藏文件夹,
其中包含know_hosts文本文件,记录了所有连接过的主机的IP和RSA公钥信息。
基于密钥的认证:
客户端登陆之前的私钥需要自己保留,而公钥也不能公开,而是发送到服务器端要登陆用户的
家目录下的".ssh"目录下
客户端用自己的私钥解解密,这时所有的认证都是基于密钥进行的,不需要密码
/etc/ssh/目录下:
sshd_config:服务器端配置文件
ssh_config :客户端配置文件
ssh v1 :由于有漏洞,用的不多
ssh_host_key, ssh_host_key.pub(主机私钥、主机公钥)
ssh v2 :流行的
ssh_host_dsa_key dsa私钥(为保证兼容性而提供的)
ssh_host_dsa_key.pub dsa公钥
ssh_host_rsa_key rsa私钥(rsa安全性和功能强于dsa)
ssh_host_rsa_key.pub rsa公钥
配置文件/etc/ssh/sshd_config:
使用"#"注释掉的行属于默认配置,如需要更改,则可以去掉注释"#",然后更改配置值。
查看配置手册:man sshd_config
#LoginGraceTime 2m :登录宽限时间,在等待输入密码的时间,不能太长。 #PermitRootLogin yes :默认允许root用户登录 #StrictModes yes :启用严格模型。 #MaxAuthTries 6 :密码的最多尝试次数 #MaxSessions 10 :对来自同一客户端最多允许打开多少会话 #RSAAuthentication yes :启用基于密钥的认证 #PubkeyAuthentication yes :启用基于公钥的认证 #AuthorizedKeysFile .ssh/authorized_keys :认证文件的存放位置 #AuthorizedKeysCommand none :认证时的命令 #AuthorizedKeysCommandRunAs nobody #RhostsRSAAuthentication no :基于主机的认证,不安全,所以关闭。 PasswordAuthentication yes :基于密码的认证 ChallengeResponseAuthentication no :挑战式单向认证,不安全,关闭 X11Forwarding yes :在客户端可以执行服务器端的窗口程序 #PrintMotd yes :登录时要显示的内容。类似于issue #PrintLastLog yes :显示上次登录的地方、时间,不安全,建议关闭。 #TCPKeepAlive yes :使用TCP的长连接。 #UseDNS yes :在连接时进一步判断对方的主机名和ip地址是否一致。如果不能够解析,会一致卡在此处。建议关闭。 #Banner none :显示文件的信息,例如Banner /etc/issue
配置文件修改改动的地方:
1、监听端口一定改为非22端口;同时可以honeypot的蜜罐程序监听在22号端口进行跟踪。
2、启用基于密钥认证的功能;
3、禁止使用version 1;
4、禁止主机认证机制;默认即为禁止;
5、禁止DNS反解;
6、禁止显示LastLogin;
7、显示banner以提示用户;但在banner中勿显示敏感信息;
ssh命令的使用:
ssh HOST: 如果没有指定用户名,以登录到当前主机上的用户名为用户登录远程主机;
ssh username@HOST
ssh -l username HOST
ssh username@HOST 'COMMAND' 在远程主机上执行一个命令,并把结果取回本地。
-p port
scp命令:
基于ssh协议,在主机之间实现安全复制的工具:
scp [-r] SOURCE DESTINATION
scp [email protected]:/root/install.log /root/
将远程主机中/root/install.log文件复制到本地的/root目录下
scp /root/ks.cfg [email protected]:/root/
将本地/root/目录下的ks.cfg文件复制到远程主机的root目录下
linux中基于密钥认证的步骤:
1、在客户端本地生成一对密钥
#ssh-keygen -t rsa
-P:指定密钥文件的加密密码,别人查看时需要输入此密码
-f:直接指定密钥文件的存放位置(默认交互式指定,而且默认放到~/.ssh/中)
-t:指定算法为rsa、dsa等。
2、将公钥(id_rsa.pub)传输至远程服务器主机
#ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
ssh-copy-id命令会在服务器端的家目录下创建.ssh,
并将其权限设置为700,且将id_rsa.pub更名并上传到210的/root/.ssh/authorized_keys,
并且其权限为600.
如果不使用ssh-copy-id命令,则需创建.ssh目录并更改权限,且需要更改公钥的名称、权限
注:如果需要认证多个主机,其公钥是追加到~/.ssh/authorized_keys。
且这种认证是单向的,如果需双向,需要重新来过。
windows客户端Xshell中基于密钥的认证连接:
1、Tools→User Key Generation Wizard..(密码生成向导)→
Key Type:[RSA]、Key Length:[1024]→
Key Name:id_rsa_2048、同时可以输入密码→
Public Key Format:SSH2-OpenSSH→Save as a file保存公钥
注:如在上一步没有保存公钥文件,则可在提取私钥后,手动生成公钥。
2、手动上传公钥文件至服务器,然后更名为~/.ssh/authorized_keys,权限为600.
这样在使用Xshell登录时可以选则使用公钥登录。