远程连接服务之 SSH
作者: dkvirus 发表于: 2018-08-26 17:49:25 最近更新: 2018-09-24 18:40:43

一、概述

一台搭建好的服务器可以不需要屏幕、键盘、鼠标等外部设备,如果服务器发生故障,不需要跑到服务器所在地理位置去定位问题,可以惬意的坐在家里,通过远程连接服务登录远程服务器进行调试。

远程连接服务端:sshd

远程连接客户端:sshscpsftp

上面说到的 sshd、ssh、scp 等都是计算机上的软件,和 qq、wechat 一样都是软件而已,只不过这些软件有特殊的用途。服务端和客户端都遵循 ssh 协议(Secure Shell Protocol),在 linux 系统中默认已经包含了上面所有软件,咱直接用即可。

二、ssh 客户端——获取 shell

1. ssh 登录过程

  • 本机输入 $ ssh dkvirus@192.xxx.xxx.xxx,往远程主机发送连接请求;
  • 远程主机将自己的公钥返回给本机,第一次登录会让选择是否保存远程主机的公钥(应该会看到 yes/no)选项,如果选择 yes,会将远程主机公钥保存在本机 ~/.ssh/known_hosts 文件中,保存之后下一次再连接就不会让你选 yes/no 了;
  • 接着会让本机用户输入登录密码,本机用远程主机的公钥对密码进行加密然后发给远程主机;
  • 远程主机拿到登录密码之后,用自己的私钥解密然后进行验证,如果登录密码正确,这次远程连接请求就通过,远程主机返回 shell 控制权。

2. 实际应用

1)连接远程主机 101.122.133.144,以 dkvirus 用户登录,敲入 ssh 命令之后会让输入 dkvirus 的登录密码,密码正确就可以获取远程主机的 shell 了。

1
2
$ ssh dkvirus@101.122.133.144
dkvirus@101.122.133.144‘s password:

2)让远程主机运行命令,后面的命令一定要写在引号里

1
2
$ ssh -f dkvirus@101.122.133.144 'll /home &> ~/home.log'
dkvirus@101.122.133.144‘s password:

3)ssh 也能传输文件,还是优先使用下面介绍的 sftp 和 scp 传输文件吧

1
2
$ cd && tar czv src | ssh dkvirus@101.122.133.144 'tar xz'
dkvirus@101.122.133.144‘s password:

4)退出远程登录,回到当前主机 shell

1
2
3
$ exit
登出
Connection to 101.122.133.144 closed.

5)免密码进行远程登录

目前,使用 ssh 连接远程登录需要输入密码,这在一些场景很不方便。如:通过 shell 脚本将本机文件通过 ssh 协议传递到远程主机,因为连接远程主机需要输入密码,就没法通过纯脚本的形式完成这个功能。

通过设置,可以让 ssh 远程登录不需要输入密码。原理就是将本机的公钥手动复制到远程主机上。这样登录时,远程主机会拿公钥和本机进行验证,通过了自然就不需要再输入密码。

Step1:本机生成公钥对

ssh-keygen 是一款软件,运行之后自动生成公钥对,默认生成目录为当前用户的 .ssh 目录下,.ssh 目录下 id_rsa 为生成的私钥文件,id_rsa.pub 为生成的公钥文件。

1
$ ssh-keygen

Step2:将本机公钥手动复制到远程主机

通过 scp 客户端(使用 ssh 协议进行文件传输的一款客户端,下面有介绍)将本机公钥文件传输到远程主机用户目录下。

1
$ scp ~/.ssh/id_rsa.pub dkvirus@101.122.133.144:~

Step3:登录远程主机将本机公钥放到指定位置

这里通过 ssh 登录,此时还是要输入远程主机用户密码的。将公钥内容复制到远程主机的 .ssh/authorized_keys 文件中。

1
2
3
4
5
6
7
8
9
# 登录远程主机,此时还需要输入一次登录密码
$ ssh dkvirus@101.122.133.144

# 切换到用户主目录,该目录下应该有刚传输过来的公钥文件
$ cd ~
# 当前用户目录如果没有 .ssh 目录就手动创建,有 .ssh 目录跳过这一行
$ mkdir ~/.ssh; chmod 700 .ssh
# 将公钥文件内容重定向到指定位置
$ cat id_rsa.pub >> .ssh/authorized_keys

Step4:测试结果

退出远程登录,再重新连接远程主机,这一次不用输入密码直接连接上。

1
2
3
4
# 退出远程登录
$ exit

$ ssh dkvirus@101.122.133.144

三、sftp 客户端——传输文件

sftp 也是走 ssh 协议的,主要用于传输文件,使用上和 ssh 客户端一样先登录,登录成功之后最前面会显示 sftp>

1
2
3
4
dkvirus@localhost:~$  sftp dkvirus@101.122.133.144
dkvirus@101.122.133.144's password:
Connected to 101.122.133.144.
sftp>

四、scp 客户端——异地复制文件

1
2
$ scp file hostname@ip:目录名        <== 上传
$ scp hostname@ip:file 目录名 <== 下载

示例:将当前机器上的 public 目录复制到远程主机 ~/test 目录下面,如果是复制目录,要加 -r 参数。

1
$ scp -r ~/public/ dkvirus@101.122.133.144:~/test

五、安全

一般不允许用 root 用户进行远程连接。

首页
友链
归档
dkvirus
动态
RSS