1.ssh简介
SSH是一种网络协议,主要用于计算机间加密传输。
具体软件实现:OpenSSH-->ssh协议的开源实现,centos默认安装
两种方式的用户登录认证:
(1)基于passwd
(2)基于key 用于批量处理
相关包
openssh
openssh-clients
openssh-server
ssh远程登录工具(基于c/s结构)
client:
基于centos客户端命令工具:ssh、scp、sftp、slogin
windows客户端软件:xshell 、securecrt
server:sshd程序
2.ssh客户端
ssh命令是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器。
原理及机制
允许实现对远程系统经验证地加密安全访问
当用户远程连接ssh服务器时,会复制ssh服务器 /etc/ssh/ssh_host*key.pub(CentOS7默认是 ssh_host_ecdsa_key.pub)文件中的公钥到客户机home家目录的 ~home./ssh/know_hosts中。下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接
注:出现“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED 警告”无法建立ssh连接。如果远程系统重装过系统, ssh指纹已经改变,你需要把 .ssh 目录下的 know_hosts 文件中相应远程主机IP一致的指纹删除,再通过ssh登录一次回答 yes,重新认证一次方可登录。 .ssh 目录是以 "." 开头的隐藏目录,需要 # ls -a 参数才能看到。
而且这个目录的权限必须是700,并且用户的home目录也不能给其他用户写权限,否则ssh服务器会拒绝登陆。如果发生不能登陆的问题,请察看服务器上的日志文件/var/log/secure。通常能很快找到不能登陆的原因。
每个SSH用户都有自己的 known_hosts 文件,此外系统也有一个这样的文件,通常是
/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。
配置文件:/etc/ssh/ssh_config (端口号,登录提示等)
##SSH服务器监听的选项
#修改监听的端口,可以增加入侵者探测系统是否运行了 sshd守护进程的难度。
Port 30003
#使用SSH V2协议
Protocol 2
#监听的地址为所有地址
#ListenAdderss 0.0.0.0
ListenAdderss 192.168.5.0/24
#禁止DNS反向解析
UseDNS no
# 密钥长度
ServerKeyBits 2048
#用户登录控制选项
#是否允许root用户登录,如果允许用户使用root用户登录,那么黑客们可以针对root用户尝试暴力破解密码,给系统安全带来风险。
PermitRootLogin no
#是否允许空密码用户登录,允许使用空密码系统就像不设防的堡垒,任何安全措施都是一句空话。
PermitEmptyPasswords no
#登录验证时间(2分钟)
LoginGraceTime 2m
#最大重试次数
MaxAuthTries 6
#只允许user用户登录,与DenyUsers选项相反
AllowUsers user1 user2
# 禁止指定的 用户或组
DenyUsers apache
#注:Allow 和 Deny 可以组合使用,它们的处理顺序是:DenyUsers, AllowUsers, DenyGroups, AllowGroups
##登录验证方式
#关闭密码验证
PasswordAuthentication no
#以下三行没什么要改的,把默认的#注释去掉就行了
RSAAuthentication yes
#启用秘钥验证
PubkeyAuthentication yes
#指定公钥数据库文件
AuthorsizedKeysFile .ssh/authorized_keys
修改配置/etc/ssh/sshd_config 可参考此脚本
3.选项和格式
格式:ssh [user@]host [COMMAND]
常见选项如下:
-l user:如ssh [-l user] host [COMMAND]
说明:连接到远程主机并指明用户user,并执行远程主机的command命令。
-p port:远程服务器监听的端口
说明·: 如果远程主机(/etc/ssh/ssh_config)更改须指明端口号
-b ip : 指定连接的源IP
说明:指明当前客户端的IP
-v : 调试模式
-C:压缩方式
-X : 支持x11转发
远程主机须支持图形化(无 yum groupinstall desktop安装图形化),将ssh登录的远程主机的图形化工具显示到当前ssh客户端
显示的终端还是为root@shen777
有时工作中,我们需要用到linux图形用户界面环境进行一些操作(比如装oracle数据库等等),这时就需要用xstart远程连接linux图形用户界面,这样我们就不用特意跑到机房操作服务器了。前提是要访问的linux服务已经装好了远程桌面环境。
首先在xshell中执行下面命令
登录远程主机
ssh root@192.168.61.153
登录远程主机并安装图形化工具以及 xwindow工具
yum -y groupinstall Desktop
yum -y groupinstall "X Window System"
yum -y install xterm
开启xstart
输入主机ip:192.168.61.153
执行命令:/usr/bin/xterm -ls -display $DISPLAY
成功
-t : 强制伪tty分配 ssh -t remoteserver1 ssh remoteserver2
说明:当远程主机remoteserver2无法直接到达时,可以使用-t参数,然后由remoteserver1跳转到remoteserver2。在此过程中要先输入remoteserver1的密码,然后再输入remoteserver2的密码,然后就可以操作remoteserver2了。
4.ssh服务登录验证方式
基于用户和口令登录验证
1 客户端发起ssh请求,服务器会把自己的公钥发送给用户
2 用户会根据服务器发来的公钥对密码进行加密
3 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功
基于秘钥
1 首先在客户端生成一对密钥(ssh-keygen)
2 并将客户端的公钥ssh-copy-id 拷贝到服务端
3 当客户端再次发送一个连接请求,包括ip、用户名
4 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串 ,例如:acdf
5 服务端将使用客户端拷贝过来的公钥进行加密,然后发 送给客户端
6 得到服务端发来的消息后,客户端会使用私钥进行解密 ,然后将解密后的字符串发送给服务端 ü 7服务端接受到客户端发来的字符串后,跟之前的字符串进 行对比,如果一致,就允许免密码登录
基于密钥的认证步骤:
(1) 在客户端生成密钥对
ssh-keygen -t rsa|dsa [-P ''] [-f “~/.ssh/id_rsa"]
ssh-keygen 默认同于ssh-keygen -t rsa
-t 指明算法
-p""表示空口令 默认要求设置口令
-f不指定路径 默认当前路径下生成 .ssh/id_rsa
(2) 把公钥文件传输至远程服务器对应用户的家目录
ssh-copy-id [-i [identity_file]] [user@]host
(3) 测试
(4) 在SecureCRT或Xshell实现基于key验证在SecureCRT工具—>创建公钥—>生成Identity.pub文件转化为openssh兼容格式(适合SecureCRT,Xshell不需要转化 格式),并复制到需登录主机上相应文件authorized_keys中, 注意权限必须为600,在需登录的ssh主机上执行:
ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
(5)重设私钥口令:
ssh-keygen –p
(6)验证代理(authentication agent)保密解密后的密钥
这样口令就只需要输入一次
在GNOME中,代理被自动提供给root用户
否则运行ssh-agent bash
(7)钥匙通过命令添加给代理 ssh-add
(1).在linux下ssh-keygen生成密钥对
[root@shen777~]# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
#询问设置公钥和私钥路径,回车默认当前目录
Created directory '/root/.ssh'.
#公钥和私钥所在目录
Enter passphrase (empty for no passphrase):
#询问输入私钥口令,为了实现自动登录不设置
Enter same passphrase again:
再次提示
Your identification has been saved in /root/.ssh/id_dsa.
#生成私钥
Your public key has been saved in /root/.ssh/id_dsa.pub.
#生成公钥
The key fingerprint is:
36:fd:79:72:2b:06:d3:cb:75:b9:f4:3c:5c:7e:18:85 root@shen777
The key's randomart image is:
#生成key指纹
+--[ DSA 1024]----+
| . |
| . E .|
| S .. ..|
| . .o...ooo|
| ++o=*+|
| =+.==|
| . .. o|
+-----------------+
[root@shen777~]# ls -al .ssh
drwx------. 2 root root 36 Sep 9 21:19 .
-rw-------. 1 root root 668 Sep 9 21:19 id_dsa
-rw-r--r--. 1 root root 602 Sep 9 21:19 id_dsa.pub
设置完成后,如果担心私钥的安全,可以从当前登录终端退出exit,断开连接,执行ssh-keygen –p 命令,重新ssh连接
但是设置之后,利用私钥连接也需要输入密码。
运行结束以后,在
$HOME/.ssh/
目录下,会新生成两个文件:
id_rsa.pub 和 id_rsa
前者是你的公钥,后者是你的私钥。
登录端的 .ssh目录权限是 ssh-keygen自己生成的不要乱改。再一次强调用户自己的目录
~/.ssh
必须不能有其他人可写的权限,.ssh 目录的权限必须是 700,,id_dsa必须是600, chmod 700 ~/.ssh 必须。否则ssh服务器会认为不安全拒绝登录。
被登录的机器 .ssh 目录是 700 ,至少不能有写的权限
ssh服务器中 .ssh 目录下的 authorized_keys 权限 600
(2)把生成的密钥文件上传到远程主机
[root@shen777~]# ssh-copy-id root@192.168.61.153
(3)测试
成功,如果失败,打开远程主机配置文件/etc/ssh/sshd_config,注释是否去掉
#RSAAuthentication yes
#启用秘钥验证
#PubkeyAuthentication yes
#指定公钥数据库文件
#AuthorsizedKeysFile .ssh/authorized_keys
重新启动服务
service sshd restart
通过xshell生成秘钥
Xshell是一款Windows下面功能强大的SSH客户端,能够按分类保存N多会话、支持Tab、支持多密钥管理等等,在SecureCRT或Xshell实现基于key验证在SecureCRT工具—>创建公钥—>生成Identity.pub文件转化为openssh兼容格式(适合SecureCRT,Xshell不需要转化 格式),并复制到需登录主机上相应文件authorized_keys中, 注意权限必须为600,在需登录的ssh主机上执行:
ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
使用密钥登录分为3步:
1、生成密钥(公钥与私钥);
2、放置公钥(Public Key)到服务器~/.ssh/authorized_key文件中;
3、配置ssh客户端使用密钥登录。
(1)在xshell中生成秘钥并保存在当前Windows端
(2)将秘钥添加到远程linux服务端
将保存在windows端的id_rsa.pub文件上传到远程服务端/root/.ssh下面(lrzsz工具),如果没有就创建此目录,并重名为authorized_keys。
如果是在远程服务端上生成的秘钥,直接执行
mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
再执行
chmod 600 /root/.ssh/authorized_keys
修改/etc/ssh/sshd_config文件,将RSAAauthentication和PubkeyAuthentication后面值改为yes,保存
重启ssh服务,重新登录远程服务端
本文转自 工运搬运维 51CTO博客,原文链接:http://blog.51cto.com/13157015/1964073,如需转载请自行联系原作者