ssh登录_ssh升级后无法ssh登录 - CSDN
  • SSH登录详解

    2018-05-27 22:22:14
    SSH登录详解1.什么是SSH登录SSH是一种网络协议,用于计算机之间的加密登录。相比传统的账户密码登录,SSH提供了一种更便捷安全的登录方式。2.SSH登录流程登录操作如下ssh user@hostSSH之所以能保证安全,是因为它...

    SSH登录详解

    1.什么是SSH登录
    SSH是一种网络协议,用于计算机之间的加密登录。
    相比传统的账户密码登录,SSH提供了一种更便捷安全的登录方式。

    2.SSH登录流程
    登录操作如下

    ssh user@host

    SSH之所以能保证安全,是因为它采用了公钥加密。
    整个流程如下:
    (1)远程主机收到用户的登录请求,将自己的公钥发给用户
    (2)用户使用这个公钥,将登录密码加密后,发送给远程主机
    (3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录

    3.中间人攻击
    SSH登录本身是安全的,问题在于,如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,
    那么用户很难辨别真伪。因为不像https,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。

    攻击者插在用户和远程主机之间,用伪造公钥,获取到用户的登录面后,再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了,
    这就是著名的“中间人攻击”

    4.口令登录-公钥加密(用户端),私钥解密(远程主机)
    如上图所示,第一次登录时,会提示用户

    The authenticity of host '121.43.230.217 (121.43.230.217)' can't be established.
    ECDSA key fingerprint is SHA256:NfXOYhYDaY7cs57XoMqAS+5D+rG8mKTumqyo+8SCO9o.
    Are you sure you want to continue connecting (yes/no)?

    意思是无法验证用户的公钥,是否正确,询问用户是否要继续。
    ECDSA key给出了远程主机公钥的SHA256编码过的值,一般在远程主机的网站会告示公钥的值,
    用户可以将这个公钥和网站上的公钥进行比对,正确则表明是远程主机。
    输入yes之后,系统会将公钥加入到已知的主机列表,如下所示,已知列表中的主机,下次不会再询问。

    Warning: Permanently added '121.43.230.217' (ECDSA) to the list of known hosts.

    5.公钥登录-私钥加密(用户端),公钥解密(远程主机)
    使用密码登录,每次都必须输入密码,非常麻烦,好在SSH还提供了公钥登录,可以省去输入密码的步骤。
    公钥登录的流程如下:
    用户将自己的公钥放在远程主机上,登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。
    远程主机用实现储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。

    这种方式要求用户提供自己的公钥,如果没有,可以使用ssh-keygen生成一个:

    ssh-keygen

    运行之后,会在/root/.ssh/目录下,分别生成公钥和私钥:id_rsa.pub和id_rsa
    输入以下命令,将公钥传送到远程主机,公钥会添加到远程主机/root/.ssh/authorized_keys文件中,公钥登录的设置就完成了。

    ssh-copy-id user@host
    展开全文
  • ssh用法及命令

    2019-08-13 15:10:18
    如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,...

    http://blog.csdn.net/pipisorry/article/details/52269785

    什么是SSH?

    简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
    SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。这里只讨论SSH在Linux Shell中的用法。如果要在Windows系统中使用SSH,会用到另一种软件PuTTY,这需要另文介绍。

    中间人攻击
    SSH之所以能够保证安全,原因在于它采用了公钥加密。
    整个过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
    这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。
    可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)。

    ssh的安装

    SSH分客户端openssh-client和openssh-server

    如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有则sudoapt-get install openssh-client),如果要使本机开放SSH服务就需要安装openssh-server。

    Ubuntu缺省已经安装了ssh client。

    #配置ssh#

    echo -e "\033[31;1m ******************************* \033[0m"
    echo -e "\033[31;1m ************安装和配置ssh************ \033[0m"
    sudo apt-get install -y openssh-server 1> /dev/null
    sudo sed -i 's/UsePAM no/UsePAM yes/g' /etc/ssh/sshd_config
    sudo sed -i '8a /etc/init.d/ssh start' /etc/profile
    sudo /etc/init.d/ssh start
    ps -e | grep ssh

    echo -e "\033[31;1m ssh授权 \033[0m"
    cd ~/.ssh/
    ssh-keygen -t rsa
    cat ./id_rsa.pub >> ./authorized_keys

     

    $ ps -e|grep ssh
     2151 ?        00:00:00 ssh-agent

     5313 ?        00:00:00 sshd

    ssh-agent表示ssh-client启动,sshd表示ssh-server启动了。

    如果缺少sshd,说明ssh服务没有启动或者没有安装。

    皮皮blog

     

     

    SSH基本用法

    SSH远程登录

    口令登录

    假定你要以用户名user,登录远程主机host,只要一条简单命令就可以了。
          $ ssh user@host  如:ssh pika@192.168.0.111
    如果本地用户名与远程用户名一致,登录时可以省略用户名。
          $ ssh host
    SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。
          $ ssh -p 2222 user@host
    上面这条命令表示,ssh直接连接远程主机的2222端口。
    如果你是第一次登录对方主机,系统会出现下面的提示:
          $ ssh user@host
          The authenticity of host 'host (12.18.429.21)' can't be established.
          RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
          Are you sure you want to continue connecting (yes/no)?
    这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?
    所谓"公钥指纹",是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上例中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。
    很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?回答是没有好办法,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。
    假定经过风险衡量以后,用户决定接受这个远程主机的公钥。
          Are you sure you want to continue connecting (yes/no)? yes
    系统会出现一句提示,表示host主机已经得到认可。
          Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.
    然后,会要求输入密码。
          Password: (enter password)
    如果密码正确,就可以登录了。
    当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。
    每个SSH用户都有自己的known_hosts文件,此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。

    公钥登录

    使用密码登录,每次都必须输入密码,非常麻烦。好在SSH还提供了公钥登录,可以省去输入密码的步骤。
    所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
    这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个:
          $ ssh-keygen
    运行上面的命令以后,系统会出现一系列提示,可以一路回车。其中有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。
    运行结束以后,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。
    这时再输入下面的命令,将公钥传送到远程主机host上面:
          $ ssh-copy-id user@host
    好了,从此你再登录,就不需要输入密码了。
    如果还是不行,就打开远程主机的/etc/ssh/sshd_config这个文件,检查下面几行前面"#"注释是否取掉。
          RSAAuthentication yes
          PubkeyAuthentication yes
          AuthorizedKeysFile .ssh/authorized_keys
    然后,重启远程主机的ssh服务。
          // ubuntu系统
          service ssh restart
          // debian系统
          /etc/init.d/ssh restart
    authorized_keys文件
    远程主机将用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。
    这里不使用上面的ssh-copy-id命令,改用下面的命令,解释公钥的保存过程:
          $ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
    这条命令由多个语句组成,依次分解开来看:(1)"$ ssh user@host",表示登录远程主机;(2)单引号中的mkdir .ssh && cat >> .ssh/authorized_keys,表示登录后在远程shell上执行的命令:(3)"$ mkdir -p .ssh"的作用是,如果用户主目录中的.ssh目录不存在,就创建一个;(4)'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub的作用是,将本地的公钥文件~/.ssh/id_rsa.pub,重定向追加到远程文件authorized_keys的末尾。
    写入authorized_keys文件后,公钥登录的设置就完成了。

    [SSH原理与运用(一):远程登录]

    使用ssh在远程后台不中断地跑程序

    Linux关闭ssh(关闭终端等)后运行的程序或者服务自动停止,如python3 a.py &。

    解决:使用nohup命令让程序在关闭窗口(切换SSH连接)的时候程序还能继续在后台运行。

    nohup python3 a.py &

    [linux进程管理与SELinux]

    ssh连接中断

    如果使用的是iTerm2,要让ssh不断线: profiles -> sessions -> When idel, send ASCII code

    其它命令行客户端,通过配置 ServerAliveInterval 来实现,在 ~/.ssh/config 中加入: ServerAliveInterval=30。表示ssh客户端每隔30秒给远程主机发送一个no-op包,no-op是无任何操作的意思,这样远程主机就不会关闭这个SSH会话。

    vim ~/.ssh/config,然后新增

    Host *
        ServerAliveInterval 60
    60秒就好了,而且基本去连的机器都保持,所以配置了*,如果有需要针对某个机器,可以自行配置为需要的serverHostName。

    [ssh保持连接不断开]

    皮皮blog

     

    SSH远程操作

    SSH数据传输

    SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行操作。
          $ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
    单引号中间的部分,表示在远程主机上执行的操作;后面的输入重定向,表示数据通过SSH传向远程主机。
    这就是说,SSH可以在用户和远程主机之间,建立命令和数据的传输通道,因此很多事情都可以通过SSH来完成。
    下面看几个例子。
    【例1】
    将$HOME/src/目录下面的所有文件,复制到远程主机的$HOME/src/目录。
          $ cd && tar czv src | ssh user@host 'tar xz'
    【例2】
    将远程主机$HOME/src/目录下面的所有文件,复制到用户的当前目录。
          $ ssh user@host 'tar cz src' | tar xzv
    【例3】
    查看远程主机是否运行进程httpd。
          $ ssh user@host 'ps ax | grep [h]ttpd'

    lz建议使用scp进行远程copy:

    scp 跨机远程拷贝

    scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。两台主机之间复制文件必需得同时有两台主机的复制执行帐号和操作权限。

    scp命令参数

    • -1 强制scp命令使用协议ssh1
    • -2 强制scp命令使用协议ssh2
    • -4 强制scp命令只使用IPv4寻址
    • -6 强制scp命令只使用IPv6寻址
    • -B 使用批处理模式(传输过程中不询问传输口令或短语)
    • -C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
    • -p 留原文件的修改时间,访问时间和访问权限。
    • -q 不显示传输进度条。
    • -r 递归复制整个目录。
    • -v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
    • -c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
    • -F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。
    • -i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
    • -l limit 限定用户所能使用的带宽,以Kbit/s为单位。
    • -o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式,
    • -P port 注意是大写的P, port是指定数据传输用到的端口号
    • -S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

    scp一般有六种使用方法
    本地复制远程文件:(把远程的文件复制到本地)
    scp root@www.test.com:/val/test/test.tar.gz /val/test/test.tar.gz
    远程复制本地文件:(把本地的文件复制到远程主机上)
    scp /val/test.tar.gz root@www.test.com:/val/test.tar.gz
    本地复制远程目录:(把远程的目录复制到本地)
    scp -r root@www.test.com:/val/test/ /val/test/
    远程复制本地目录:(把本地的目录复制到远程主机上)
    scp -r ./ubuntu_env/ root@192.168.0.111:/home/pipi
    pika:/media/pika/files/machine_learning/datasets$scp -r SocialNetworks/ piting@192.168.0.172:/media/data/pipi/datasets

    本地复制远程文件到指定目录:(把远程的文件复制到本地)
    scp root@www.test.com:/val/test/test.tar.gz /val/test/
    远程复制本地文件到指定目录:(把本地的文件复制到远程主机上)
    scp /val/test.tar.gz root@www.test.com:/val/

    ps: scp复制文件时只指定服务器地址不加路径默认复制到哪里???

    [12个scp传输文件的命令栗子]

    [scp 跨机远程拷贝]

    SSH端口操作

    绑定本地端口

    既然SSH可以传送数据,那么我们可以让那些不加密的网络连接,全部改走SSH连接,从而提高安全性
    假定我们要让8080端口的数据,都通过SSH传向远程主机,命令就这样写:
          $ ssh -D 8080 user@host
    SSH会建立一个socket,去监听本地的8080端口。一旦有数据传向那个端口,就自动把它转移到SSH连接上面,发往远程主机。可以想象,如果8080端口原来是一个不加密端口,现在将变成一个加密端口。

    本地端口转发

    有时,绑定本地端口还不够,还必须指定数据传送的目标主机,从而形成点对点的"端口转发"。为了区别后文的"远程端口转发",我们把这种情况称为"本地端口转发"(Local forwarding)。
    假定host1是本地主机,host2是远程主机。由于种种原因,这两台主机之间无法连通。但是,另外还有一台host3,可以同时连通前面两台主机。因此,很自然的想法就是,通过host3,将host1连上host2。
    我们在host1执行下面的命令:
          $ ssh -L 2121:host2:21 host3
    命令中的L参数一共接受三个值,分别是"本地端口:目标主机:目标主机端口",它们之间用冒号分隔。这条命令的意思,就是指定SSH绑定本地端口2121,然后指定host3将所有的数据,转发到目标主机host2的21端口(假定host2运行FTP,默认端口为21)。
    这样一来,我们只要连接host1的2121端口,就等于连上了host2的21端口。
          $ ftp localhost:2121
    "本地端口转发"使得host1和host3之间仿佛形成一个数据传输的秘密隧道,因此又被称为"SSH隧道"。
    下面是一个比较有趣的例子。
          $ ssh -L 5900:localhost:5900 host3
    它表示将本机的5900端口绑定host3的5900端口(这里的localhost指的是host3,因为目标主机是相对host3而言的)。
    另一个例子是通过host3的端口转发,ssh登录host2。
          $ ssh -L 9001:host2:22 host3
    这时,只要ssh登录本机的9001端口,就相当于登录host2了。
          $ ssh -p 9001 localhost

    上面的-p参数表示指定登录端口。

    出错处理:ssh: Could not resolve hostname 192.168.*.*:***: Name or service not known

    解决:指定端口不能直接使用ip:端口号,使用-p参数来解决就可以了。

    远程端口转发

    既然"本地端口转发"是指绑定本地端口的转发,那么"远程端口转发"(remote forwarding)当然是指绑定远程端口的转发。
    还是接着看上面那个例子,host1与host2之间无法连通,必须借助host3转发。但是,特殊情况出现了,host3是一台内网机器,它可以连接外网的host1,但是反过来就不行,外网的host1连不上内网的host3。这时,"本地端口转发"就不能用了,怎么办?
    解决办法是,既然host3可以连host1,那么就从host3上建立与host1的SSH连接,然后在host1上使用这条连接就可以了。
    我们在host3执行下面的命令:
          $ ssh -R 2121:host2:21 host1
    R参数也是接受三个值,分别是"远程主机端口:目标主机:目标主机端口"。这条命令的意思,就是让host1监听它自己的2121端口,然后将所有数据经由host3,转发到host2的21端口。由于对于host3来说,host1是远程主机,所以这种情况就被称为"远程端口绑定"。
    绑定之后,我们在host1就可以连接host2了:
          $ ftp localhost:2121
    这里必须指出,"远程端口转发"的前提条件是,host1和host3两台主机都有sshD和ssh客户端。

    皮皮blog

     

    SSH的其他参数

    SSH还有一些别的参数,也值得介绍。
    N参数,表示只连接远程主机,不打开远程shell;T参数,表示不为这个连接分配TTY。这个两个参数可以放在一起用,代表这个SSH连接只用来传数据,不执行远程操作。
          $ ssh -NT -D 8080 host
    f参数,表示SSH连接成功后,转入后台运行。这样一来,你就可以在不中断SSH连接的情况下,在本地shell中执行其他操作。
          $ ssh -f -D 8080 host
    要关闭这个后台连接,就只有用kill命令去杀掉进程。

    [SSH原理与运用(二):远程操作与端口转发]

    皮皮blog

    from: http://blog.csdn.net/pipisorry/article/details/52269785

    ref: [Ubuntu环境下SSH的安装及使用]

    [25个必须记住的SSH命令]*

    [Linux 下 SSH 命令实例指南]*

    [数字签名是什么?]

    [  * SSH, The Secure Shell: The Definitive Guide: 2.4. Authentication by Cryptographic Key, O'reilly

      * SSH, The Secure Shell: The Definitive Guide: 9.2. Port Forwarding, O'reilly

      * Shebang: Tips for Remote Unix Work (SSH, screen, and VNC)

      * brihatch: SSH Host Key Protection

      * brihatch: SSH User Identities

      * IBM developerWorks: 实战 SSH 端口转发

      * Jianing YANG:ssh隧道技术简介

      * WikiBooks: Internet Technologies/SSH

      * Buddhika Chamith: SSH Tunneling Explained

    ]

     

    展开全文
  • 买了搬瓦工,有时候需要远程登录进行一些配置。这时候就需要SSH了。搬瓦工自带SSH服务端,因此这里只需要配置客户端就可以了。默认配置Windows下有很多SSH工具。在这里我是用的是Putty。如果安装了Git并配置使用...

    买了搬瓦工,有时候需要远程登录进行一些配置。这时候就需要SSH了。搬瓦工自带SSH服务端,因此这里只需要配置客户端就可以了。

    默认配置

    Windows下有很多SSH工具。在这里我是用的是Putty。如果安装了Git并配置使用Putty的话,就不需要另外在安装Putty了。使用SSH连接服务器的命令如下:

    ssh IP地址

    一般来说为了安全性考虑,端口号等一些参数并不会使用默认值。这样的话命令就变成这样:

    ssh 用户名@IP地址 -p 端口号

    如果连接成功的话会提示你输入远程服务器的密码。全部成功之后SSH就会显示远程服务器的提示符,这时候就说明连接成功了。

    密钥登录

    每次登录SH都需要输入密码很麻烦,而且可能不太安全。SSH还能使用另外一种登录方式,也就是使用密钥登录。这种登录方式需要客户端生成一堆公钥私钥对,然后将公钥添加到服务器中,这样下次就可以直接登录了。

    首先生成SSH密钥,依照提示输入信息即可。默认生成在用户主目录中的.ssh文件夹中。带pub的是公钥,接下来需要添加到服务器中。

    ssh-keygen

    然后将本地公钥添加到服务器中,需要使用另一个命令:

    scp -P 端口号 本地文件路径 用户名@远程服务器地址:远程路径

    然后登陆服务器,找到复制进去的公钥,将公钥名字改为authorized_keys并添加到对应的.ssh文件夹中。然后退出SSH重新登陆试试,成功的话不需要输入密码就会直接进入远程服务器。

    展开全文
  • openssh远程系统登录

    2018-10-14 21:36:10
    1.openssh 当主机中开启openssh服务时,那么就对外开放了远程连接的接口 ...openssh服务的服务端: sshd ...ssh root@172.25.254.130 ##在客户端用ssh命令连接172.25.0.10主机的root用户 ...

    openssh远程系统登录

    1.概述

    在Linux系统中,OpenSSH是目前最流行的远程系统登录与文件传输应用,也是传统Telenet、FTP和R系列等网络应用的换代产品。
    其中,ssh(Secure Shell)可以替代telnet、rlogin和rsh,scp(Secure Copy)与sftp(Secure FTP)能后替代ftp。
    
    OpenSSH采用密钥的方式对数据进行加密,确保数据传输的安全。在正式开始传输数据之前,双方首先要交换密钥,当收到对方的数据时,
    再利用密钥和相应的程序对数据进行解密。这种加密的数据传输有助于防止非法用户获取数据信息。
    
    OpenSSH采用随机的方式生成公私密钥。密钥通常只需生成一次,必要时也可以重新制作。
    
    当使用ssh命令登录到远程系统时,OpenSSH服务器的sshd守护进行将会发送一个公钥,OpenSSH客户端软件ssh将会提示用户确认是否接收发送的公钥。
    同时,OpenSSH客户端也会向服务器回传一个密钥,使OpenSSH连接双方的每个系统都拥有对方的密钥,因而能够解密对方经由加密链路发送的加密数据。
    
    OpenSSH服务器的公钥与私玥均存储在/etc/ssh目录中。在OpenSSH客户端,用户收到的所有公钥,
    以及提供密钥的OpenSSH服务器的IP地址均存储在用户主目录下的~/.ssh/known_hosts文件中(.ssh是一个隐藏目录)。
    如果密钥与IP地址不再匹配,OpenSSH将会认为某个环节出了问题。例如,重新安装操作系统或者升级OpenSSH都会导致系统再次生成新的密钥,
    恶意的网络攻击也会造成密钥的变动。因此,当密钥发生变化时,总是应当先了解密钥发生变化的原因,以确保网络访问期间的数据安全。
    

    2.openssh服务

    当主机中开启openssh服务时,那么就对外开放了远程连接的接口
    
    openssh服务的服务端:  sshd
    openssh服务的客户端:  ssh
    

    3.在客户端连接sshd(服务端)的方式

    格式:ssh 服务端用户@服务端ip地址
    
    例如:
    ##在客户端用ssh命令连接172.25.254.130主机的root用户
    [root@localhost ~]# ssh root@172.25.254.130
    The authenticity of host '172.25.254.130 (172.25.254.130)' can't be established.
    ECDSA key fingerprint is eb:24:0e:07:96:26:b1:04:c2:37:0c:78:2d:bc:b0:08.
    Are you sure you want to continue connecting (yes/no)? 	
    #当当前主机第一次连接陌生主机时,会自动建立.ssh/know_hosts,这个文中记录的是连接过的主机信息
    root@172.25.254.130's password: 			#输入密码连接成功
    Last login: Fri Mar 30 02:05:52 2018 from 172.25.254.66
    [root@localhost ~]# exit				    #表示退出当前连接
    logout
    Connection to 172.25.254.130 closed.
    
    ## -X表示开启图形
    [kiosk@foundation66 Desktop]$ ssh -X root@172.25.254.230
    root@172.25.254.230's password: 
    Last login: Tue Oct  9 07:37:39 2018 from 172.25.254.66
    ##打开摄像头(拍照)
    [root@localhost ~]# cheese
    
    ** (cheese:2969): WARNING **: Couldn't connect to accessibility bus: Failed to connect to socket /tmp/dbus-iA6qSfPzfH: Connection refused
    

    在这里插入图片描述

    实验1:远程连接
    
    在虚拟机中:
    ##running表示服务处于开启状态
    [root@localhost ~]# systemctl status sshd.service
    sshd.service - OpenSSH server daemon
       Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
       Active: active (running) since Wed 2018-10-03 02:22:06 EDT; 2min 45s ago
      Process: 1161 ExecStartPre=/usr/sbin/sshd-keygen (code=exited, status=0/SUCCESS)
     Main PID: 1178 (sshd)
       CGroup: /system.slice/sshd.service
               └─1178 /usr/sbin/sshd -D
    
    Oct 03 02:22:06 localhost systemd[1]: Started OpenSSH server daemon.
    Oct 03 02:22:06 localhost sshd[1178]: Server listening on 0.0.0.0 port 22.
    Oct 03 02:22:06 localhost sshd[1178]: Server listening on :: port 22.
    Oct 03 02:24:16 localhost sshd[1598]: Accepted password for root from 172.2...h2
    Hint: Some lines were ellipsized, use -l to show in full.
    在真机中:
    ##此时可以ssh远程连接
    [kiosk@foundation34 Desktop]$ ssh root@172.25.254.134
    root@172.25.254.134's password: 
    Last login: Wed Oct  3 02:24:16 2018 from 172.25.254.34
    在虚拟机中:
    [root@localhost ~]# systemctl stop sshd.service
    ##dead 表示服务已经关闭
    [root@localhost ~]# systemctl status sshd.service
    sshd.service - OpenSSH server daemon                   #开机自启
       Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
       Active: inactive (dead) since Wed 2018-10-03 02:25:12 EDT; 6min ago
      Process: 1178 ExecStart=/usr/sbin/sshd -D $OPTIONS (code=exited, status=0/SUCCESS)
      Process: 1161 ExecStartPre=/usr/sbin/sshd-keygen (code=exited, status=0/SUCCESS)
     Main PID: 1178 (code=exited, status=0/SUCCESS)
    
    Oct 03 02:22:06 localhost systemd[1]: Started OpenSSH server daemon.
    Oct 03 02:22:06 localhost sshd[1178]: Server listening on 0.0.0.0 port 22.
    Oct 03 02:22:06 localhost sshd[1178]: Server listening on :: port 22.
    Oct 03 02:24:16 localhost sshd[1598]: Accepted password for root from 172.2...h2
    Oct 03 02:25:05 localhost sshd[1629]: Accepted password for root from 172.2...h2
    Oct 03 02:25:12 localhost systemd[1]: Stopping OpenSSH server daemon...
    Oct 03 02:25:12 localhost systemd[1]: Stopped OpenSSH server daemon.
    Hint: Some lines were ellipsized, use -l to show in full.
    在真机中:
    ##此时无法远程连接
    [kiosk@foundation34 Desktop]$ ssh root@172.25.254.134
    ssh: connect to host 172.25.254.134 port 22: Connection refused
    
    实验2:远程操控
    
    此过程并未一直连接234这台主机,一旦操作完成便会自动退出
    ##远程关闭230这台主机的图形
    [root@localhost ~]# ssh root@172.25.254.234 'init 3'
    The authenticity of host '172.25.254.234 (172.25.254.234)' can't be established.
    ECDSA key fingerprint is eb:24:0e:07:96:26:b1:04:c2:37:0c:78:2d:bc:b0:08.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '172.25.254.234' (ECDSA) to the list of known hosts.
    root@172.25.254.234's password:
    

    在这里插入图片描述

    ##远程234开启这台主机的图形
    [root@localhost ~]# ssh root@172.25.254.230 'init 5'
    root@172.25.254.234's password: 
    ^CKilled by signal 2.
    

    在这里插入图片描述

    4.给ssh服务添加新的认证方式 (KEY认证)

    客户端(client):172.25.254.130
    服务端(service):172.25.254.230
    

    (1)更改主机名

    在desktop里:
    [root@localhost Desktop]# hostnamectl set-hostname client
    [root@localhost Desktop]# hostname
    client
    
    在server里:
    [root@localhost ~]# hostnamectl set-hostname service
    [root@localhost ~]# hostname
    service
    

    (2)删除原始配置

    [root@service ~]# rm -rf /root/.ssh/*
    [root@client ~]# rm -rf /root/.ssh/*
    

    (3)在服务端生成锁和钥匙

    1. 生成密钥
    
    方式1:命令的方式
    ##生成密钥
    [root@service ~]# ssh-keygen 
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa): #保存加密字符的文件用默认 
    Created directory '/root/.ssh'.
    Enter passphrase (empty for no passphrase): 		 #设定密码;可以为空,如果想为空必须大于4位
    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:
    00:4f:b0:72:40:9f:a6:fb:91:86:d2:69:bc:7c:75:5f root@localhost
    The key's randomart image is:
    +--[ RSA 2048]----+
    | .o o..          |
    |   o *           |
    |  . * o          |
    |   =   .         |
    |  .     S        |
    | o + .. .   E    |
    |. B +. . . .     |
    | + +..    .      |
    |  o..            |
    +-----------------+
    

    在这里插入图片描述

    方式2:脚本的方式自动生成密钥
    ##删除刚生成的密钥
    [root@service ~]# rm -rf /root/.ssh/*
    ## <<表示输入重定向
    [root@service ~]# vim create_ssh_key.sh
    ###################
    #!/bin/bash
    ssh-keygen <<EOF
    
    
    
    EOF
    

    在这里插入图片描述

    ##执行脚本
    [root@service ~]# sh create_ssh_key.sh
    

    在这里插入图片描述

    [root@service ~]# cd /root/.ssh
    [root@service .ssh]# ls
    id_rsa      id_rsa.pub
    私钥(钥匙)  公钥(锁)
                      
    注意:用脚本的方式自动生成密钥时,必须以开启图形的方式连接虚拟机才能实现
    
    2.在服务端加密ssh用户的认证(一般用公钥)
    
    ##加密root用户认证;注意后边跟的是本机ip
    [root@service .ssh]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.230
    

    在这里插入图片描述

    ##authorized_keys为锁文件;而id_rsa.pub只是生成锁文件模板
    [root@service .ssh]# ls
    authorized_keys  id_rsa  id_rsa.pub  known_hosts
    
    ssh-copy-id -i /root/.ssh/id_rsa.pub   root@172.25.254.230  ##加密认证
    
    参数详解:
    ssh-copy-id				##加密命令
    -i						##指定密钥
    /root/.ssh/id_rsa.pub	##密钥
    root					##加密用户
    172.25.254.200			##主机ip
    

    (3)将私钥发送给客户端

    [root@service .ssh]# ls
    authorized_keys  id_rsa  id_rsa.pub  known_hosts
    [root@service .ssh]# scp /root/.ssh/id_rsa root@172.25.254.130:/root/.ssh
    The authenticity of host '172.25.254.130 (172.25.254.130)' can't be established.
    ECDSA key fingerprint is eb:24:0e:07:96:26:b1:04:c2:37:0c:78:2d:bc:b0:08.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '172.25.254.130' (ECDSA) to the list of known hosts.
    root@172.25.254.130's password: 
    id_rsa                                          100% 1679     1.6KB/s   00:00 
    

    (4)测试

    在客户端:
    [root@client ~]# cd /root/.ssh
    [root@client .ssh]# ls
    id_rsa
    ##免密成功
    [root@client ~]# ssh root@172.25.254.230
    The authenticity of host '172.25.254.230 (172.25.254.230)' can't be established.
    ECDSA key fingerprint is eb:24:0e:07:96:26:b1:04:c2:37:0c:78:2d:bc:b0:08.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '172.25.254.230' (ECDSA) to the list of known hosts.
    Last login: Sun Oct 14 09:07:47 2018 from 172.25.254.66
    [root@service ~]# exit
    logout
    Connection to 172.25.254.230 closed.
    

    在这里插入图片描述

    ##@1若删除私钥后,则此时免密连接失效,但还可以密码连接
    [root@client .ssh]# ls
    id_rsa  known_hosts 
    [root@client .ssh]# rm -rf id_rsa 
    [root@client .ssh]# ssh root@172.25.254.230
    root@172.25.254.230's password: 
    Last login: Sun Oct 14 09:14:48 2018 from 172.25.254.130
    [root@service ~]# exit
    logout
    Connection to 172.25.254.230 closed.
    

    在这里插入图片描述

    ##解决方案:从服务端重新再传一份钥匙即可
    [root@service .ssh]# scp id_rsa root@172.25.254.130:/root/.ssh
    root@172.25.254.130's password: 
    Permission denied, please try again.
    root@172.25.254.130's password: 
    id_rsa                                        100% 1675     1.6KB/s   00:00 
    
    [root@client .ssh]# ls
    id_rsa  known_hosts
    [root@client .ssh]# ssh root@172.25.254.230
    Last login: Sun Oct 14 09:17:40 2018 from 172.25.254.130
    [root@service ~]# exit
    logout
    Connection to 172.25.254.230 closed.
    

    在这里插入图片描述

    ##@2若更改ssh认证服务端的配置(关闭ssh的默认认证方式)
    [root@service ~]# vim /etc/ssh/sshd_config
    #################
    78 PasswordAuthentication no
    

    在这里插入图片描述

    [root@service ~]# systemctl restart sshd
    
    ##如果有钥匙便仍然可以免密连接
    ## known_hosts文件记录了ssh登陆信息;即只要ssh登陆过其他主机便会自动生成此文件
    [root@client .ssh]# ls
    id_rsa  known_hosts
    [root@client .ssh]# ssh root@172.25.254.230
    Last login: Sun Oct 14 09:22:41 2018 from 172.25.254.130
    [root@service ~]# exit
    logout
    Connection to 172.25.254.230 closed.
    

    在这里插入图片描述

    ##如果没有钥匙,则无法连接
    [root@client .ssh]# rm -rf /root/.ssh/id_rsa 
    [root@client .ssh]# ls
    known_hosts
    [root@client .ssh]# ssh root@172.25.254.230
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
    

    在这里插入图片描述

    ##解决方案:还原配置/开启ssh的默认认证方式即可
    [root@service ~]# vim /etc/ssh/sshd_config
    #################
    78 PasswordAuthentication yes
    

    在这里插入图片描述

    [root@client .ssh]# ssh root@172.25.254.230
    root@172.25.254.230's password: 
    Last login: Tue Oct  9 09:28:38 2018 from 172.25.254.130
    [root@service ~]# exit
    logout
    Connection to 172.25.254.230 closed.
    

    在这里插入图片描述

    注意:加密ssh用户认证必须在更改ssh认证服务端的配置之前,因为加密操作需要开启ssh的默认认证方式
    
    ##@3在服务端删除锁文件
    [root@service ~]# cd /root/.ssh
    [root@service .ssh]# ls
    authorized_keys  id_rsa  id_rsa.pub  known_hosts
    ##重新发送钥匙
    [root@service .ssh]# scp id_rsa root@172.25.254.130:/root/.ssh
    root@172.25.254.130's password: 
    id_rsa                                        100% 1675     1.6KB/s   00:00  
    ##若锁文件被删除,客户端解密文件失效
    [root@service .ssh]# rm -rf authorized_keys
    [root@service .ssh]# ls
    id_rsa  id_rsa.pub  known_hosts
    

    在这里插入图片描述

    ##此时即使客户端有钥匙,也无法实现免密连接
    [root@client .ssh]# ls
    id_rsa  known_hosts
    [root@client .ssh]# ssh root@172.25.254.230
    root@172.25.254.230's password: 
    

    在这里插入图片描述

    ##解决方案:在服务端copy一份锁文件即可
    ##再次说明id_rsa.pub只是生成锁文件的模板
    [root@service .ssh]# cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
    
    [root@client .ssh]# ssh root@172.25.254.230
    Last login: Tue Oct  9 10:24:07 2018 from 172.25.254.130
    

    在这里插入图片描述

    注意:
    ##默认无法密码连接其他用户(非root用户)
    [root@client .ssh]# ssh student@172.25.254.230
    student@172.25.254.230's password: 
    Permission denied, please try again.
    

    在这里插入图片描述

    ##加密student用户
    [root@service .ssh]# ssh-copy-id -i /root/.ssh/id_rsa.pub student@172.25.254.230
    

    在这里插入图片描述

    ##此时便可以实现免密连接student用户
    [root@client .ssh]# ssh student@172.25.254.230
    Last failed login: Sat Oct 13 09:59:16 EDT 2018 from 172.25.254.230 on ssh:notty
    There were 3 failed login attempts since the last successful login.
    

    在这里插入图片描述

    5.sshd的安全配置

    ##禁止原始认证方式
    vim /etc/ssh/sshd_config
    
    78 PasswordAuthentication yes|no	##开启或关闭ssh的默认认证方式
    48 PermitRootLogin yes|no			##开启或关闭root用户的登陆权限
    
    79 AllowUsers westos				##用户白名单,当前设定是只允许westos登陆
    80 DenyUsers linux					##用户黑名单,当前设定是只不允许linux登陆
    
     实验1:
        ##开启root用户的登陆权限(默认root用户可以的登陆)
        [root@service ~]# vim /etc/ssh/sshd_config
        #################
        48 PermitRootLogin yes
    

    在这里插入图片描述

     [root@service ~]# systemctl restart sshd
    
    [root@client .ssh]# ssh root@172.25.254.230
    Last login: Tue Oct  9 10:55:52 2018 from 172.25.254.66
    [root@service ~]# exit
    logout
    

    在这里插入图片描述

    ##关闭root用户的登陆权限
    [root@service ~]# vim /etc/ssh/sshd_config
    #################
    48 PermitRootLogin no
    

    在这里插入图片描述

    [root@service ~]# systemctl restart sshd
    
    [root@client .ssh]# ssh root@172.25.254.230
    root@172.25.254.230's password: 
    Permission denied, please try again.
    root@172.25.254.230's password: 
    

    在这里插入图片描述

    实验2:
    [root@service ~]# useradd westos
    ##注意:一定要设定密码,否则会影响后续实验
    [root@service ~]# passwd westos
    Changing password for user westos.
    New password: 
    BAD PASSWORD: The password is shorter than 8 characters
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    [root@service ~]# useradd linux
    [root@service ~]# passwd linux
    Changing password for user linux.
    New password: 
    BAD PASSWORD: The password is shorter than 8 characters
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    

    在这里插入图片描述

    ##设定白名单
    [root@service ~]# vim /etc/ssh/sshd_config
    #################
    79 AllowUsers westos
    

    在这里插入图片描述

    [root@service ~]# systemctl restart sshd
    
    [root@client ~]# ssh westos@172.25.254.230
    westos@172.25.254.230's password: 
    Last login: Tue Oct  9 11:23:33 2018 from 172.25.254.130
    [westos@service ~]$ exit
    logout
    Connection to 172.25.254.230 closed.
    [root@client ~]# ssh linux@172.25.254.230
    linux@172.25.254.230's password: 
    Permission denied, please try again.
    linux@172.25.254.230's password:
    

    在这里插入图片描述

     实验3:
    ##设定黑名单
    [root@service ~]# vim /etc/ssh/sshd_config
    #################
    79 #AllowUsers westos
    80 DenyUsers westos
    

    在这里插入图片描述

    [root@service ~]# systemctl restart sshd
    
    [root@client ~]# ssh westos@172.25.254.230
    westos@172.25.254.230's password: 
    Permission denied, please try again.
    westos@172.25.254.230's password: 
    
    [root@client ~]# ssh linux@172.25.254.230
    linux@172.25.254.230's password: 
    Last failed login: Tue Oct  9 11:24:42 EDT 2018 from 172.25.254.130 on ssh:notty
    There was 1 failed login attempt since the last successful login.
    

    在这里插入图片描述

    展开全文
  • ssh密钥登录linux

    2018-08-27 18:24:06
    ----------------------- 问题起源:There were 16753 failed login attempts since the last successful login. 问题所在:由于没有配置登录限制,都是...准备工作:了解ssh,由于之前了解过ssh,直接百度获取...
  • ssh登录过程详细介绍

    2011-05-22 16:21:00
          <br /> <br />  <br />    <br />  服务器端和客户端就取得了相同的会话密钥和会话ID。对于后续传输的数据,两端都会使用会话密钥进行加密和解密,保证...
  • 今天重新复习了一遍SSH协议,在这里把ssh登录做个笔记。 首先SSH是什么?SSH(Secure SHell)是Linux、Unix、Mac及其他网络设备最常用的远程CLI管理协议,SSH使用秘钥对数据进行加密,保证了远程管理数据的安全性。...
  • SSH两种级别的远程登录 SSH的高级应用 Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器...
  • ssh登录linux

    2019-04-21 19:19:41
    上一篇提到用ssh登录centos好处很多,许多linux系统管理员都在用ssh。在windows下ssh客户端主要有puTTY、Xshell、secureCRT、ssh secure shell。linux下有openssh,这是个命令行工具。这篇主要将puTTY和Xshell的使用...
  • SSH是一种通讯协议,可以实现远程安全登录。可以通过如putty、MobaXterm等工具通过ssh安全登录到虚拟机进行操作。 Openssh:ssh远程安全登录的开源实现(软件)。 一、SSH远程登录的原理(基于口令) 1、客户端向...
  • 有时候在ssh远程登录到其他主机上时发现登录时间太长,经过亲自测试,发现主要有两个问题会导致ssh登录慢: 1.使用了dns反查,这样的话当ssh某个IP时,系统会试图通过DNS反查相对应的域名,如果DNS中没有这个IP...
  • Windows to Windows SSH登录

    2018-07-23 10:08:24
    网上一直都是windows to linux或者linux to linux的SSH登录,现记录windows to windows的SSH登录。 SSH 登录原理参考:http://www.cnblogs.com/hukey/p/6248468.html先来个目录,理清思路: - 服务器端PowerShell...
  • Linux ssh登录命令

    2014-04-07 22:19:43
    ssh命令用于远程登录上Linux主机。 常用格式:ssh [-l login_name] [-p port] [user@]hostname 更详细的可以用ssh -h查看。 举例 不指定用户: ssh 192.168.0.11 指定用户: ssh -l root 192.168.0.11 ...
  • 解决方案 从ESX3.0开始,为了提高安全性,...非root用户可以使用SSH登录。这是在主机防火墙外的另一层保护。 注:到ESX主机的每个SSH连接都使用额外的服务控制台资源,当使用的脚本或第三方软件会创建多个到ES
  • 有时候在ssh远程登录到其他主机上时发现登录时间太长,经过亲自测试,发现主要有两个问题会导致ssh登录慢: 1.使用了dns反查,这样的话当ssh某个IP时,系统会试图通过DNS反查相对应的域名,如果DNS中没有这个IP的...
  • ssh登录服务器是程序猿日常生活必不可少的一部分,也时不时的会遇到自己配置ssh登录的问题,拿日常使用的git来讲,不管使用github也好,还是自己搭建的gitlab等等,如果不能很好的理解ssh的原理,极容易遇到各种问题...
  • 如同apt-get安装程序时会有-y参数来避免交互输入一样,我也希望在ssh登录时能够直接附加...这里更想要的是不改动server/client的配置下直接免交互式ssh登录。  于是我先查看帮助:    这里没有可用参数能够附加...
  • 1、首先在 Linux 服务器上生成公钥和...scp root@192.168.1.168:/root/.ssh/id_rsa ~/.ssh这里最好将私钥文件放在 ~/.ssh 目录下,不然在使用 ssh 登录时,需要使用 -i 来指定私钥文件。3、公钥文件需要添加到服务器...
  • centos8 ssh登录设置

    2020-02-27 14:37:50
    ssh登录这种服务已经做好,不需要用户去关注。但是也有一些小公司打包的镜像是相对纯净的发行包。 如果是已经可以用账户和密码登录,则无需查看本文内容亦可。 ssh(安全外壳协议)是一种加密通讯协议,主要用于...
  • 由于实验室的GPU集群是放在服务器上的,需要用SSH登录,之前没有接触过SSH,因此把摸索的过程记录下来,以备后用。 Windows上安装SSH客户端 我用的是Putty 选择第一个框的64-bit下载,安装即可。 登录远程...
1 2 3 4 5 ... 20
收藏数 197,926
精华内容 79,170
关键字:

ssh登录