7.3 KiB
ssh基础用法
作者:小K
2022-04-22 23:36:00
-
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可以禁用密码登录只使用密钥登录,也可以两者并存,只要有一个公钥和私钥,然后把公钥放到特定的文件里就可以直接使用私钥免密登录。
-
ssh的一个小技巧,ssh如果在一段时间不响应的话可以修改心跳时间,每隔一定时间发送一个空包,保持响应,一般来说我不建议设置的时间超过30,如果是网络环境差点30都可能断,一般设置成15,极端情况设置成5,这里以秒为单位。 还有就是如果退出了ssh,那么正在运行的程序就会被杀死,可以使用screen命令让程序运行在后台,然后Ctrl+a+d来返回,这样就可以安心的退出ssh,不用担心程序挂了,恢复的命令也有。
-
如果是第一次登录一个主机会出现一个提示语,大概如下:
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登录的结果,因为终端的显示方式就是“用户名@主机名”这种格式,登录成功之后就可以用终端在远程主机执行一些命令操作。
-
可能大部分没有尝试过的用户会发现在使用远程登录自己主机的时候会被拒绝,这是因为ssh分为两部分,一部分是server,一部分是client,client就是我们上边用的ssh命令,server部分桌面环境不一定有,Ubuntu的server版会在安装的时候让用户选择是否安装server,如果没有的话可以直接安装openssh-server,需要注意的是,我们自己安装的server默认禁止root用户登录,所以要想让root用户远程登录需要修改server的配置文件,再次就不细说的,网上一把教程节省资源。
-
ssh 使用公钥登录
使用公钥登录的优点:
- 不需要记忆密码,不用每次登录都输入密码
- 而且具有更好的安全性,一般认为的密码是有可能被泄露的,或被暴力破解的,而公钥没有这个问题
- vs-code 等工具的远程开发需要使用公钥登录
使用公钥登录的方法:
-
如果之前没有生成过公钥,就先生成公钥。 检查客户机
~/.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:
重复密钥口令,把上一行的内容再输一遍就行。 -
设置ssh-server允许使用公钥登录
登录ssh-server,编辑/etc/ssh/sshd_config
文件.sudo vim /etc/ssh/sshd_config
设置允许公钥登录,将
PubkeyAuthentication
设置为yes。PubkeyAuthentication yes
重启ssh-server
sudo systemctl restart sshd
-
将客户机的公钥写入ssh-server 客户机的公钥文件默认在
/home/<your-user-name>/.ssh/id_rsa.pub
文件中(注意.pub
后缀,没有.pub
后缀的是私钥文件,不要动私钥)。将公钥文件的内容复制到ssh-server的/home/<your-user-name>/.ssh/authorized_keys
文件中(如果.ssh
目录不存在就新建一个,如果authorized_keys
文件不存在也新建一个)。 -
验证
在客户机输入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