docs/02_基础操作/ssh基础用法.md

7.3 KiB
Raw Blame History

ssh基础用法

作者小K

2022-04-22 23:36:00

  1. SSH 为 Secure Shell 的缩写,由 IETF 的网络小组Network Working Group所制定SSH 为建立在应用层基础上的安全协议一般来说用的最频繁的还是用来登录远程主机他内置了一个sftp的模块使用加密的方式传输用的端口也是22比起不加密的ftp安全性要好很多。最简单的指令格式如下

    ssh 用户名@主机地址
    

    当然这是基于端口是默认的情况如果sshserver的端口不是默认的就会变成下边这样:

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

    然后会提示输入密码,这个密码就是你要登录的用户名的密码,这个用户必须是存在的,而且是允许登录的才行,一般情况下大家在安装系统时候建立的用户是没问题的,而且密码默认不回显。

    他还可以代理x11协议把界面传输到本地但是实际上是在远程主机运行但是需要远程主机安装xauth并且本地和远端都启动x11代理才可以实际测试的时候有的应用可能是不支持的此外如果本地系统是win的话可能不好用如果是linux那么只要网速足够还是挺好的缺点是有可能无法使用中文输入法只能复制粘贴虽然可以通过配置的方式让输入法启动但是我没成功过。另外就是有一个端口映射的作用一般来说称之为ssh隧道可以把远端的端口映射到本地也可以把本地的端口映射到远程也可以改成双的这样可以用作内网穿透或者是把本地服务暴露在远端也可以把远端的端口变成本地访问而且是用ssh加密过的不用担心被窃听等一般情况下开发会用的比较多把数据库的端口映射到本地的某个端口直接访问不用把公网的对应端口打开提高安全性再比如说vnc把vnc的端口映射到本地虽然vncview提示不加密但是中间传输的数据是经过ssh加密的不用担心被窃听而且可以关闭对应端口的防火墙不用担心被别人扫描到。ssh可以禁用密码登录只使用密钥登录也可以两者并存只要有一个公钥和私钥然后把公钥放到特定的文件里就可以直接使用私钥免密登录。

  2. ssh的一个小技巧ssh如果在一段时间不响应的话可以修改心跳时间每隔一定时间发送一个空包保持响应一般来说我不建议设置的时间超过30如果是网络环境差点30都可能断一般设置成15极端情况设置成5这里以秒为单位。 还有就是如果退出了ssh那么正在运行的程序就会被杀死可以使用screen命令让程序运行在后台然后Ctrl+a+d来返回这样就可以安心的退出ssh不用担心程序挂了恢复的命令也有。

  3. 如果是第一次登录一个主机会出现一个提示语,大概如下:

    The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established.
    ECDSA key fingerprint is SHA256:61U/SJ4n/QdR7oKT2gaHNuGxhx98saqMfzJnzA1XFZg.
    Are you sure you want to continue connecting (yes/no)?
    

    这个就是你第一次登录一个新主机的时候给的提示至于为什么给这个提示是因为ssh的通讯过程导致的算是一种验证方法具体大家可以查一下百度需要注意的是在这里只有输入yes才可以继续单纯的一个y或者是回车是不可以的然后输入密码登录成功登录之后会显示一些欢迎语和最后一次的登录地址。

    登录成功后最下边的看起来是和上边的一致的但是实际上是ssh登录的结果因为终端的显示方式就是“用户名@主机名”这种格式,登录成功之后就可以用终端在远程主机执行一些命令操作。

  4. 可能大部分没有尝试过的用户会发现在使用远程登录自己主机的时候会被拒绝这是因为ssh分为两部分一部分是server一部分是clientclient就是我们上边用的ssh命令server部分桌面环境不一定有Ubuntu的server版会在安装的时候让用户选择是否安装server如果没有的话可以直接安装openssh-server需要注意的是我们自己安装的server默认禁止root用户登录所以要想让root用户远程登录需要修改server的配置文件再次就不细说的网上一把教程节省资源。

  5. ssh 使用公钥登录

    使用公钥登录的优点:

    • 不需要记忆密码,不用每次登录都输入密码
    • 而且具有更好的安全性,一般认为的密码是有可能被泄露的,或被暴力破解的,而公钥没有这个问题
    • vs-code 等工具的远程开发需要使用公钥登录

    使用公钥登录的方法:

    1. 如果之前没有生成过公钥,就先生成公钥。 检查客户机~/.ssh/目录下是否有id_rsa以及id_rsa.pub文件,如有,则无需生成。如没有,输入ssh-keygen生成自己的公私钥

      Generating public/private rsa key pair.
      Enter file in which to save the key (/home/<your-user-name>/.ssh/id_rsa): 
      Enter passphrase (empty for no passphrase): 
      Enter same passphrase again: 
      Your identification has been saved in /home/f4prime/.ssh/id_rsa
      Your public key has been saved in /home/f4prime/.ssh/id_rsa.pub
      ...
      

      生成过程中会有询问几个问题,一般情况下直接一路回车就可以。感兴趣的可以看下面的解释
      Enter file in which to save the key要求输入密钥的保存位置,默认值是/home/<your-user-name>/.ssh/id_rsa,一般不用更改,直接回车就可以.
      Enter passphrase (empty for no passphrase): 输入密钥的口令,如果不需要就直接回车,需要就输入口令后回车。
      Enter same passphrase again: 重复密钥口令,把上一行的内容再输一遍就行。

    2. 设置ssh-server允许使用公钥登录
      登录ssh-server编辑/etc/ssh/sshd_config文件.

      sudo vim /etc/ssh/sshd_config
      

      设置允许公钥登录,将PubkeyAuthentication设置为yes。

      PubkeyAuthentication yes
      

      重启ssh-server

      sudo systemctl restart sshd
      
    3. 将客户机的公钥写入ssh-server 客户机的公钥文件默认在/home/<your-user-name>/.ssh/id_rsa.pub文件中(注意.pub后缀,没有.pub后缀的是私钥文件不要动私钥。将公钥文件的内容复制到ssh-server的/home/<your-user-name>/.ssh/authorized_keys文件中(如果.ssh目录不存在就新建一个,如果authorized_keys文件不存在也新建一个)。

    4. 验证
      在客户机输入

      ssh <your-user-name>@<your-ssh-server>
      

      发现这次不要输入密码直接就登录进去了。

本文撰写过程中参考了以下文章:

https://forum.openkylin.top/forum.php?mod=viewthread&tid=193097

https://forum.openkylin.top/forum.php?mod=viewthread&tid=193211