ssh客户端

ssh客户端

ssh,配置文件:/etc/ssh/ssh_config

在配置文件/etc/ssh/ssh_config中Strict HostKey Checking no 首次登录不显示检查提示。

格式:ssh [user@]host IP地址 [command]

ssh [-l user]host IP地址 [command]

(如果不指定用户,你是哪个用户就连接哪个用户上,后面还可跟命令)

 

Ssh客户端允许实现对远程系统经验证地加密安全访问

当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh_host*key.pub(CentOS7默认是ssh_host_ecdsa_key.pub)文件中的公钥到客户机的~./ssh/know_hosts中。下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接

 

下面来看一下ssh的一些选项:

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

例如:ssh 192.168.10.178 -p 2222 如果将服务器的端口改为2222,再用ssh连接不指定端口(默认是22端口),此时就无法连接,连接时指定端口号就可以连接了。

改端口号:semanage port -a -t ssh_port_t -p tcp 端口号 (如果启用了SELinux策略,改的端口号为非标准端口号,违反了SELinux策略,直接修改配置文件是不可以的,要用这种方法去修改,记得改完之后重启一下sshd服务)

-b 指定源IP来连接服务器

-v:调试模式(连接的时候发现一些错误,可以用-v来排错)

-C:压缩方式

-X: 支持x11转发

xclock命令在centos6上面可以打开小钟表,在centos7上面打不开,现在我用centso7去连接centos6,直接连接上去,执行xclock命令是打不开小钟表的,需要价格-X选项,才能打开

-Y:支持信任x11转发

ForwardX11Trusted yes

-t: 强制伪tty分配

 

小实验:

如图:假如企业内部有两台机器B,C,其中C是ssh service ,企业内部连接互联网是通过防火墙来连接的,只有B才能连接到C,A不能直接连接C,假如A出差了,在企业外部,现在A想要连接C,怎样连接呢?A可以连接到B,通过B这个跳板再来连接到C ssh -t B(ip地址) ssh C(ip地址)

 

 

实验环境:有3台机器A,B,C,这3台机器都在一个网段中。

1)先在C机器上制定防火墙策略,拒绝A机器连接iptables -A INPUT -s 192.168.10.136 -j REJECT

这样A就不能直接连接C了,,B可以连接C,A可以连接B,所以B可以做跳板,让A借助B来连接C

2)ssh -t 192.168.10.135 ssh 192.168.10.178 这样就能连接了,需要输入两次密码

 

常见的ssh连接问题

在用ssh连接的时候我们会遇到一些问题,接下来介绍一下这些问题和解决这些问题的方案

(1)解决ssh连接较慢的方案

我们在用ssh连接的时候可能会非常慢,可以调整服务器端的配置文件,修改以下两项,重启服务,就能生效,再重启sshd服务,之后再用ssh连接就非常快了

vim /etc/ssh/sshd_config 编辑服务器端的配置文件

 

然后systemctl restart sshd.service(centos7)或service sshd restart(centos6),重启一下sshd服务,就可以了

(2)去掉ssh第一次连接服务器提示的yes or no?

当某台机器第一次去连接某服务器时,会问你是否要继续连接,yes or no?,敲了yes就会在家目录下的.ssh目录下生成了一个known_hosts文件,这个文件就记录了你所连接的每一台服务器的公钥key(如下图我目前只连接了一个服务器,所以只有一个服务器的公钥key)

下面就来修改配置文件来解决这个问题

vim /etc/ssh/sshd_config

将该项改为no,第一次连接不用提示yes或者no

 

(3)/etc/ssh中的key不能被破坏

ssh中的key不能被破坏,如果这些key都被删了,ssh服务不能被启动

先关闭了sshd服务,再开启sshd服务,然后就发现启动失败

再把/app/下的key移回来就可以启动成功了。

 

ssh服务登录验证方式

1.用户/口令

2.基于密钥

1.基于用户名口令登录验证

基于用户和口令登录验证(客户端用服务器的公钥加密密码,再发给服务器,服务器再拿私钥解开密码,验证密码是否正确)

1)客户端发起ssh请求,服务器会把自己的公钥发送给用户

2)用户会根据服务器发来的公钥对密码进行加密

3)加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功

2.基于密钥的登录方式

1)首先在客户端生成一对密钥(ssh-keygen)

2)并将客户端的公钥ssh-copy-id 拷贝到服务端

3)当客户端再次发送一个连接请求,包括ip、用户名

4)服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:acdf

5)服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端

6)得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端

7)服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录

基于密钥的认证:

1)在客户端生成密钥对 ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa

-t 指定算法 (默认是rsa算法) -P指定私钥的口令,什么都不写就是生成的私钥没有口令 -f 指定私钥文件路径(默认是/root/.ssh/id_rsa)

2)把公钥文件传输至远程服务器对应用户的家目录 ssh-copy-id -i /root/.ssh/id_rsa 192.168.10.107

ssh-copy -i /root/.ssh/id_rsa 192.168.10.107 该命令看似传输的是私钥,其实传输的是公钥,我们来看一下公私钥是什么样的

如下图:我们看到公私钥的内容

 

在服务器上的家目录下查看一下authorized_keys这个文件是否生成

再来查看一下这个文件authorized_keys

对比一下上面的公私钥的内容,可以发现传输的确实是公钥

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

第六步和第七步合在一起用,我们在管理多台服务器时,你要一个一个的连接,一个一个的输密码,连接上去,这样十分麻烦的,而且效率低下,我们可以基于秘钥登陆的方式,来连接多台服务器,这样你在连接多台服务器时,就不用一个一个的输入每一台服务器的密码了,你只需记住一个私钥密码,连接的时候输入私钥密码,就可以连接多台服务器了,如果你连私钥密码都懒得输入,就可以将第六步和第七步结合在一起使用,如下图,先验证代理,再把私钥密码托管给代理,这样你再去连接其他服务器就不用输入私钥密码了

 

scp命令–走ssh端口的远程复制命令

scp[options] SRC... DEST/ 源可以有多个

两种方式:可以将远程主机的文件拷到本机上,也可以将本机的文件拷到远程主机

scp[options] [user@]host:/sourcefile /destpath

scp 192.168.10.178:/app/testdir/ /app/linshi

scp[options] /sourcefile [user@]host:/destpath

scp /app/linshi 192.168.10.178:/app/testdir

常用选项:

-C:压缩数据流

-r:递归复制

-p:保持原文件的属性信息

-q:静默模式

-P port:指明remote host 的监听的端口

rsync命令–更聪明的复制

基于ssh和rsh服务实现高效率的远程系统之间复制文件

使用安全的shell连接做为传输方式

•rsync –av/etc server1:/tmp复制目录和目录下文件

•rsync –av/etc/ server1:/tmp只复制目录下文件

如下图:testdir后面不加/,复制testdir目录和目录下文件,加/,只复制testdir目录下的文件,testdir目录文身不复制

比scp更快,只复制不同的文件,若只是想更新变化了的文件,就用rsync

选项:

-n 模拟复制过程(并不真实去复制,只是演示一下复制过程)

-v 显示详细过程

-r 递归复制目录树

-p 保留权限

-t 保留时间戳

-g 保留组信息

-o 保留所有者信息

-l 将软链接文件本身进行复制(默认)

-L 将软链接文件指向的文件复制

-a 存档,相当于–rlptgoD,但不保留ACL(-A)和SELinux属性(-X)

 

好了就,今天的内容就到这里,希望对大家能有所帮助

 

 

 

 

 

 

 

 

 

posted @ 2017-09-29 20:47  大天使彦  阅读(1811)  评论(0编辑  收藏  举报