ssh服务介绍
ssh加密技术
ssh服务认证两种类型
ssh连接慢的问题
1. ssh介绍
ssh服务监听本地22端口,服务端是sshd守护进程.
客户端一般是 CRT,Xshell,putty或者ssh客户机
默认情况下,ssh服务主要提供2个服务功能:
一个是类似于Telnet远程连接服务,
一个类似于FTP服务的sftp-server,借助ssh协议来传输数据.
特别提醒: ssh客户端(ssh命令)还包含一个很有用的远程安全copy命令scp,也是通过ssh协议工作的.
2.ssh加密技术
ssh服务分为ssh1.x 和 ssh2.x
ssh2支持RSA和DSA密钥,ssh1只支持RSA算法
3. ssh服务认证两种方式
一 基于口令的认证
通过IP+ssh端口,连接到服务端,此联机过程是加密的.
命令如下:
用法一: 连接远端服务器 ssh -p22 root@10.10.10.34 参数 -p 指定端口,默认22 用法二: ssh连接过去不登录shell,只执行命令: ssh -p 22 oldboy@10.0.0.4 /usr/bin/free -m ###如果指定了命令,则在远程主机上执行而不是登录shell。
第一次建立连接:
会出现下面警告信息,但是连接建立后,会把对端服务器key相关信息保存在本地当前用户家目录下的~/.ssh/known_hosts ,下次连接就不会再有警告信息.
[root @ promotion]#ssh root@192.168.255.135 主机'192.168.255.135(192.168.255.135)'的真实性无法建立。 ECDSA键指纹是aa:91:fb:b7:ea:7b:9c:7b:b0:61:77:e3:c7:09:c5:3f。 您确定要继续连接(是/否)? 是 警告:将“192.168.255.135”(ECDSA)永久添加到已知主机列表中。 root@192.168.255.135的密码: [root@A134 .ssh]# cat known_hosts 192.168.255.134 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFI97sX7x2jd4SijuJquXhfXcExsh9d71Nxt1F9tyeyXcQL1CkTNsyIV4reJkYdQsnHRSzsFRB7oUZHbMyqFN8g= 192.168.255.135 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFI97sX7x2jd4SijuJquXhfXcExsh9d71Nxt1F9tyeyXcQL1CkTNsyIV4reJkYdQsnHRSzsFRB7oUZHbMyqFN8g=
二 基于密钥对的安全认证
原理:
1.本地生成一对密钥对,公私钥,然后把公钥放到要访问的目标服务器上,另外还需要把私钥放到ssh客户端或对应的客户端机器上.
2. 此时,如果想要连接到这个带有公钥的ssh服务器,客户端ssh软件或客户端服务器就会向ssh服务器发送请求,请求用联机的用户密钥进行安全验证,ssh服务器收到请求后,会先在该ssh服务器上连接的用户的家目录下寻找放上去的对应用户的公钥,然后就把它和连接的ssh客户端发送过来的公钥进行比较,如果一致,ssh服务器就用公钥加密"质询"并发给ssh客户端.
3.ssh客户端收到 质询后,就可以用自己的私钥解密,然后再把它发送给ssh服务器,使用这种方式,需要知道联机用户的密钥文件,与第一种基于口令验证的方式相比,第二种方式不需要在网络上传动口令密码,所以安全性就更高了.
命令如下:
第一步:生成公私钥 ssh-keygen -t rsa 参数:-t 指定加密算法 有 rsa ,dsa 此命令会生成一对公私钥在~/.ssh/目录下,即id_rsa(私钥,保留在客户端) id_rsa.pub(发送给服务端) [root@B135 ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 65:92:5b:89:71:bc:2e:3b:c2:9c:a1:7c:9e:42:eb:8d root@B135 The key's randomart p_w_picpath is: +--[ RSA 2048]----+ | ... | | =.. | | + =. | | *. | | S. | | . . . . | | o = o o | | =o*.o | | .E++. . | +-----------------+ [root@B135 .ssh]# ls id_rsa id_rsa.pub known_hosts 第二步:将公钥发给服务端,然后ssh对端主机就不需要输入密码了. ssh-copy-id 192.168.255.134 [root@B135 .ssh]# ssh-copy-id 192.168.255.134 The authenticity of host '192.168.255.134 (192.168.255.134)' can't be established. ECDSA key fingerprint is aa:91:fb:b7:ea:7b:9c:7b:b0:61:77:e3:c7:09:c5:3f. Are you sure you want to continue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@192.168.255.134's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh '192.168.255.134'" and check to make sure that only the key(s) you wanted were added. [root@B135 .ssh]# ssh 192.168.255.134 Last login: Sun Oct 1 05:04:44 2017 from 192.168.255.1 [root@A134 ~]# 第三步:设置服务器只允许密钥验证,拒绝口令验证方式 [root@linuxprobe ~]# vim /etc/ssh/sshd_config ………………省略部分输出信息……………… 74 75 # To disable tunneled clear text passwords, change to no here! 76 #PasswordAuthentication yes 77 #PermitEmptyPasswords no 78 PasswordAuthentication no #改为no即可 79 ………………省略部分输出信息……………… [root@linuxprobe ~]# systemctl restart sshd
注意: ssh-copy-id的特殊用法
1. 如果ssh端口修改了,如23456端口,那么用上面的命令就无法进行分发密钥了,
解决办法: ssh-copy-id -i ./id_dsa.pub "-p 23456 root@192.168.255.134"
注意要用双引号" " 把端口和用户和ip引起来.
ssh-copy-id的原理:
ssh-copy-id -i ./id_dsa.pub user1@192.168.255.134 就是把 ~/.ssh/id_dsa.pub复制到 对端用户下的.ssh目录(提前创建)下 ,并做了更改名字的操作, 名字改为authorized_keys ,并且权限变为600. [root@A134 .ssh]# ll total 8 -rw------- 1 root root 391 Oct 1 05:23 authorized_keys -rw-r--r--. 1 root root 527 Oct 1 05:03 known_hosts [root@A134 .ssh]# 也就是说,你直接用其他方法,把客户端的公钥传到服务端对应的.ssh/目录下,并改名为authorized_keys, 并且修改权限为600,也就可以实现无密码登录了. 为什么要改为这个名字呢?这个需要看ssh配置文件了cat /etc/ssh/sshd_config | grep authoried_keys AuthorizedKeysFile .ssh/authorized_keys
4. ssh连接慢的问题:
使用 ssh -v 192.168.255.134 显示连接过程 查看连接过程. 有效解决办法: 1. 修改本地hosts文件,把目标机器的ip和域名加上去 2. 修改本地客户端配置文件 ssh_conf 找到 GSSAPIAuthentication yes 改为 GSSAPIAuthentication no 保存。 GSSAPI ( Generic Security Services Application Programming Interface) 是一套类似Kerberos 5 的通用网络安全系统接口。该接口是对各种不同的客户端服务器安全机制的封装,以消除安全接口的不同, 降低编程难度。但该接口在目标机器无域名解析时会有问题。我看到有人给ubuntu提交了相关bug, 说要将GSSAPIAuthentication的缺省值设为no,不知为何,ubuntu9.10的缺省值还是yes
5. 更改ssh默认登录配置
Port 54324 修改默认端口22 为 54324 PermitRootLogin no 禁止root用户登录 PermitEmptyPasswords no 禁止空密码登录 UseDNS no 不使用DNS GSSAPIAuthentication no 关闭这个可以解决ssh连接慢的问题
6. scp 和sftp的用法
scp的基本语法使用: scp 每次都是全量copy,效率不高. scp -P 52113 [源文件] oldboy@10.0.0.1:/[对方的路径] 推送文件到远端 scp -P 52113 oldboy@10.0.0.1:/data/txt ./ 从远端拉取文件到本地 scp --help -r copy目录 -p 保持原有属性 sftp的基本用法: Windows客户端和Linux服务器之间传输工具: 1. rz sz 2. winscp 基于ssh 3. SFX 4) sftp 基于ssh,加密传输 5) Samba http ftp nfs sftp -oPort=52113 oldboy@10.0.0.4 默认链接过去的目录是家目录 put /data/oldboy.txt /tmp 上传文件上来,也可以指定目录 get /data/ddd 下载文件 下载到当前目录
7. 使用脚本进行批量分发,企业实战
#!/bin/sh if [ $# -ne 1 ] then echo " USAGE:/bin/sh $0 arg1" exit 1 fi for n in 8 9 do scp $1 user1@10.0.0.$n:~ #分发目录的话 -rp -r目录 -p保存属性 done
#!/bin/sh file="$1" remotedir="$2" . /etc/init.d/functions if [ $# -ne 1 ] then echo " USAGE:/bin/sh $0 arg1" exit 1 fi for n in 8 9 do scp -P52113 -rp $file user1@10.0.0.$n:$remotedir >/dev/null 2>&1 if [ $? -eq 0 ] then action "scp $file to $remotedir is ok" /bin/true else action "scp $file to $remotedir is fail" /bin/false fi done