1.ssh简介

SSH是一种网络协议,主要用于计算机间加密传输。

具体软件实现:OpenSSH-->ssh协议的开源实现,centos默认安装

两种方式的用户登录认证:

(1)基于passwd

(2)基于key 用于批量处理

相关包

openssh

openssh-clients

openssh-server

ssh远程登录工具(基于c/s结构)

client:

基于centos客户端命令工具:ssh、scp、sftp、slogin

clip_p_w_picpath001

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 可参考此脚本

clip_p_w_picpath002

3.选项和格式

格式:ssh [user@]host [COMMAND]

常见选项如下:

-l user:如ssh [-l user] host [COMMAND]

说明:连接到远程主机并指明用户user,并执行远程主机的command命令。

clip_p_w_picpath003

-p port:远程服务器监听的端口

说明·: 如果远程主机(/etc/ssh/ssh_config)更改须指明端口号

-b ip : 指定连接的源IP

说明:指明当前客户端的IP

-v : 调试模式

-C:压缩方式

-X : 支持x11转发

远程主机须支持图形化(无 yum groupinstall desktop安装图形化),将ssh登录的远程主机的图形化工具显示到当前ssh客户端

clip_p_w_picpath004

clip_p_w_picpath005

显示的终端还是为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

clip_p_w_picpath006

clip_p_w_picpath007

clip_p_w_picpath008

开启xstart

clip_p_w_picpath009

输入主机ip:192.168.61.153

执行命令:/usr/bin/xterm -ls -display $DISPLAY

clip_p_w_picpath010

成功

clip_p_w_picpath011

-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 p_w_picpath 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)测试

clip_p_w_picpath012

成功,如果失败,打开远程主机配置文件/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端

clip_p_w_picpath013

clip_p_w_picpath014

clip_p_w_picpath015

clip_p_w_picpath016

(2)将秘钥添加到远程linux服务端

将保存在windows端的id_rsa.pub文件上传到远程服务端/root/.ssh下面(lrzsz工具),如果没有就创建此目录,并重名为authorized_keys。

clip_p_w_picpath017

如果是在远程服务端上生成的秘钥,直接执行

mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys

再执行

chmod 600 /root/.ssh/authorized_keys

clip_p_w_picpath018

修改/etc/ssh/sshd_config文件,将RSAAauthentication和PubkeyAuthentication后面值改为yes,保存

clip_p_w_picpath019

重启ssh服务,重新登录远程服务端

clip_p_w_picpath020