• SSH原理


    参考:https://github.com/wangdoc/ssh-tutorial
    ssh是一个加密协议,通常用于远程登陆服务器为了避免明文传输导致的不安全。ssh分为服务端和客户端,被登录的服务器安装ssh服务端,要登陆的用户是ssh客户端。

    SSH服务端

    ssh服务端称为sshd,Ubuntu安装:sudo apt-get install openssh-server

    sshd配置文件

    sshd 的配置文件在/etc/ssh目录,主配置文件是sshd_config,此外还有一些安装时生成的密钥。

    • /etc/ssh/sshd_config:配置文件

    注意,如果重装 sshd,上面这些密钥都会重新生成,导致客户端重新连接 ssh 服务器时,会跳出警告,拒绝连接。为了避免这种情况,可以在重装 sshd 时,先备份/etc/ssh目录,重装后再恢复这个目录。或者客户端运行:ssh-keygen -R hostname删除原来的公钥指纹,再次连接。

    配置文件sshd_config的格式是,每个命令占据一行。每行都是配置项和对应的值,配置项的大小写不敏感,与值之间使用空格分隔。

    Port 2034
    

    上面的配置命令指定,配置项Port的值是2034Port写成port也可。

    配置文件还有另一种格式,就是配置项与值之间有一个等号,等号前后的空格可选。

    Port = 2034
    

    配置文件里面,#开头的行表示注释。

    # 这是一行注释
    

    注意,注释只能放在一行的开头,不能放在一行的结尾。

    Port 2034 # 此处不允许注释
    

    上面的写法是错误的。

    另外,空行等同于注释。

    sshd 启动时会自动读取默认的配置文件。如果希望使用其他的配置文件,可以用 sshd 命令的-f参数指定。

    $ sshd -f /usr/local/ssh/my_config
    

    上面的命令指定 sshd 使用另一个配置文件my_config

    修改配置文件以后,可以用 sshd 命令的-t(test)检查有没有语法错误。

    $ sshd -t
    

    配置文件修改以后,并不会自动生效,必须重新启动 sshd。

    $ sudo systemctl restart sshd.service
    

    SSH客户端

    Ubuntu安装:sudo apt-get install openssh-client

    基本用法

    ssh username@hostname

    如果是第一次连接,需要保存服务器公钥指纹(服务器公钥经过hash之后的值),以后每次连接需要验证这个指纹。所有的公钥指纹存在~/.ssh/known_hosts文件中。

    SSH命令行配置

    -c

    -c参数指定加密算法。

    $ ssh -c blowfish,3des server.example.com
    # 或者
    $ ssh -c blowfish -c 3des server.example.com
    

    上面命令指定使用加密算法blowfish3des

    -i

    -i参数用于指定私钥,意为“identity_file”,默认值为~/.ssh/id_dsa(DSA 算法)和~/.ssh/id_rsa(RSA 算法)。注意,对应的公钥必须存放到服务器,详见《密钥登录》一章。

    $ ssh -i my-key server.example.com
    

    -p

    -p参数指定 SSH 客户端连接的服务器端口。

    $ ssh -p 2035 server.example.com
    

    上面命令连接服务器的2035端口。

    SSH密钥登陆

    一种客户端免除输入密码的登陆方式。

    密钥登陆过程

    1. 客户通过ssh-keygen生成自己的公钥密钥。
    2. 手动将客户的公钥放在服务器的指定位置
    3. 客户端向服务器发送SSH登录请求
    4. 服务端收到后明文发送一段随机数据给客户
    5. 客户收到之后用自己的私钥加密这段数据(签名)发送给服务器
    6. 服务器用客户端提供给自己的公钥解密,如果与原始数据一致,则允许登录。

    ssh-keygen:生命密钥

    通常使用参数t指定密钥的加密算法:ssh-keygen -t dsa

    生成密钥以后,建议修改它们的权限,防止其他人读取。

    $ chmod 600 ~/.ssh/id_rsa
    $ chmod 600 ~/.ssh/id_rsa.pub
    

    配置项

    ssh-keygen的命令行配置项,主要有下面这些。

    (1)-b

    -b参数指定密钥的二进制位数。这个参数值越大,密钥就越不容易破解,但是加密解密的计算开销也会加大。

    一般来说,-b至少应该是1024,更安全一些可以设为2048或者更高。

    (2)-C

    -C参数可以为密钥文件指定新的注释,格式为username@host

    下面命令生成一个4096位 RSA 加密算法的密钥对,并且给出了用户名和主机名。

    $ ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"
    

    (3)-f

    -f参数指定生成的私钥文件。

    $ ssh-keygen -t dsa -f mykey
    

    上面命令会在当前目录生成私钥文件mykey和公钥文件mykey.pub

    (4)-F

    -F参数检查某个主机名是否在known_hosts文件里面。

    $ ssh-keygen -F example.com
    

    (5)-N

    -N参数用于指定私钥的密码(passphrase)。

    $ ssh-keygen -t dsa -N secretword
    

    (6)-p

    -p参数用于重新指定私钥的密码(passphrase)。它与-N的不同之处在于,新密码不在命令中指定,而是执行后再输入。ssh 先要求输入旧密码,然后要求输入两遍新密码。

    (7)-R

    -R参数将指定的主机公钥指纹移出known_hosts文件。

    $ ssh-keygen -R example.com
    

    (8)-t

    -t参数用于指定生成密钥的加密算法,一般为dsarsa

    上传公钥

    客户端的公钥一般放在服务器的~/.ssh/authorized_keys,每个公钥占一行。权限是644。

  • 相关阅读:
    哈哈,原来这叫做“松鼠症”……并谈谈我建议的学习方法
    入坑IT十年(二)技术以外
    入坑IT都快十年了
    也来谈谈IT培训
    技术,是不是越新越好?
    十年之后再看“面向对象”
    话说,你这样根本就不应该去“创业型”公司
    我为什么不做外包
    NetTopologySuite Geometry&WKT&WKB&GeoJSON互转
    wpf 打印图片
  • 原文地址:https://www.cnblogs.com/hellozhangjz/p/16629300.html
Copyright © 2020-2023  润新知