一、什么是SSH?
简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。需要指出的是,SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。
SSH应用不仅仅局限于远程管理登录,其实它包括了三个组件,其中:
1.ssh 远程登录 SecureCRT 、Xshell、Putty;
2.sftp 文件共享(类FTP) SSH Secure File Transfer Client;
3.scp 文件共享 (类cp).
二、SSH基本用法:
1.从一台Linux主机远程登录到另外一台服务器、或者登录到本机。
$ ssh user@host #-> ssh 用户名@远程主机IP
如果本地用户名与远程用户名一致,登录时可以省略用户名。
$ ssh host
如果ssh服务器使用了非默认端口例如2345,则客户机子在登录时必须明确指定。
$ ssh -p 2345 user@host
常用选项:
a: -2 强制使用第2代ssh协议
b: -p 指定端口号
注意事项:前提是远程主机(目标主机)上必须有一个用户身份;
两个基本条件:a:空密码用户登录禁止
b:root登录禁止
2.用户的远程登录控制;通过修改/etc/ssh/sshd.conf 配置文件,可以进一步提高sshd远程登录服务的安全性。
怎样禁止root登录:
[root@pxe_srv_3 ~]# vim /etc/ssh/sshd.conf..................#PermitRootLogin no #->将注释符号删除、并将 yes 改为 no ,那样就会禁止root以ssh登录..................~
修改端口号:
[root@pxe_srv_3 ~]# vim /etc/ssh/sshd.conf................#Port 22 #->将注释去掉,改成非标准的端口号即可................改变端口号之后,在进行远程连接时指定改变过后的端口号:[root@pxe_srv_3 ~]# ssh -p port user@远程主机IP
限制用户登录验证过程的时间(默认为2分钟)及最大尝试数,若超过限制后仍未登陆则断开连接。
[root@pxe_srv_3 ~]# vim /etc/ssh/sshd_config................#LoginGraceTime 2m #->超时时间#MaxAuthTries 6 #->最大尝试数................
拒绝用户zhangsan、lisi远程登录系统,其他均允许
[root@pxe_srv_3 ~]# vim /etc/ssh/sshd_configDenyUsers zhangsan lisi #->在配置文件中添加此行内容.
允许用户jerry登录系统,允许用户admin从主机59.151.110.110远程登录系统,其他用户拒绝(不要同时使用AllowUsers和DenyUsers配置)
[root@pxe_srv_3 ~]# vim /etc/ssh/sshd_configAllowUsers jerry admin@59.151.110.110admin@59.151.110.110
3.scp远程复制文件
从本机拷贝文件到远程主机:scp 本地文件 用户名@远程主机地址:远程主机目标目录scp -r 本地目录 用户名@远程主机地址:远程主机目标目录从远程主机拷贝文件到本地:scp 用户名@远程主机地址:远程目录 本地目录scp -r 用户名@远程主机地址:远程目录 本地目录
常用选项: -p:保持原文件属性
-r:复制目录
-P:指定端口号(ssh port)
举例分析:例如我们有台放在远端的Server,需要定期的备份该服务器上的/website目录;
contab -e
/usr/bin/scp -rp /backup/website_$(date +%F)
虽然上面的操作思路是没有问题的,但是还是离不开人为的操作,故无法实现自动化执行,因为在你进行远程登录进行拷贝的时候需要手动输入用户webadmin的用户密码.那如何让两台主机之间建立一个信任关系呢?
下面就运用到了加密的知识:对称密钥加密加密与解密使用同一密钥优势:速度快缺点:密钥本省需要交换非对称密钥加密也称之为公开密钥加密,使用时生成两个密钥,一个公开存放,为公钥;一个私人持有,为私钥。用户用其中一个密钥加密的数据只有用另一个才能解密。优势:安全性好缺点:速度慢所以加密信息时,通常是对称密钥加密非对称密钥结合使用用公钥加密,私钥解密 ---加密文件用私钥加密,用公钥解密 --数字签名
建立信任主机:
在客户端创建密钥对
在本机(localhost)已root身份登录
[root@pxe_srv_3 ~]# ssh-keygen -t rsaGenerating 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:3b:fc:c2:a9:fb:ba:1e:5d:1e:37:8a:2b:5e:82:1a:35 root@pxe_srv_3[root@pxe_srv_3 ~]# ls -lh ~/.ssh/total 12K-rw------- 1 root root 1.7K Sep 1 06:22 id_rsa #->私钥文件-rw-r--r-- 1 root root 396 Sep 1 06:22 id_rsa.pub #->公钥文件
b. 上传公钥文件给服务器:
[root@pxe_srv_3 ~]# scp /root/.ssh/id_rsa.pubwebadmin@192.168.10.28:/home/webadmin#->运用scp上传公钥文件到服务器上webadmin的家目录;webadmin@192.168.10.28's password: #->此时还是需要远程服务器上webadmin用户的密码id_rsa.pub 100% 396 0.4KB/s 00:00[root@pxe_srv_3 ~]#
c. 在服务器端以webadmin用户身份登录,将客户端公钥文件的内容添加至webadmin用户的授权密钥库
[webadmin@pxe_srv_001 ~]$ mkdir -p ~webadmin/.ssh #->默认不存在,手动创建[webadmin@pxe_srv_001 ~]$ cd /home/webadmin/[weadmin@pxe_srv_001 webadmin]$ cat id_rsa.pub >> .ssh/authorized_keys#->将公钥导入到授权密钥库文件authorized_keys.[webadmin@pxe_srv_001 ~]$ ls -ld .ssh/drwx------ 2 aa aa 4096 Aug 31 21:12 .ssh/[webadmin@pxe_srv_001 ~]$ ls -ld .ssh/authorized_keys-rw------- 1 aa aa 396 Aug 31 21:12 .ssh/authorized_keys[webadmin@pxe_srv_001 ~]$
由于sshd默认采用严格的权限检测模式(StrictModes yes),因此需要注意授权密钥文件authorized_keys的权限设置;所有者要求是登录的目标用户或root,同组或其他用户对该文件不能有写入权限。否则无法使用密钥验证成功登录系统。权限保持为600, .ssh目录为700即可~
d. 使用密钥对验证方式登录服务器:
[root@pxe_srv_3 ~]# ssh aa@192.168.10.28 #->直接回车就登录成功.Last login: Sat Aug 31 21:15:12 2013 from 192.168.10.24[webadmin@pxe_srv_001 ~]$
未完待续....