zoukankan      html  css  js  c++  java
  • 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)

     

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

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä'.. 问题解决方法
    Mysql存储引擎federated
    实习心语
    Linux版本CentOS、Ubuntu和Debian的异同
    Ubuntu忘记MySQL密码重设方法
    运行时异常和一般异常
    网络爬虫-正方教务系统登录
    大四心语
    缓存更新的套路
    (String)、toString、String.valueOf的区别
  • 原文地址:https://www.cnblogs.com/1477717815fuming/p/7612732.html
Copyright © 2011-2022 走看看