Linux SSH

作者: BeeBee生信 | 来源:发表于2021-03-03 23:26 被阅读0次

SSH 为 2 个主机间提供安全加密连接,这个连接还可以用于终端访问、文件传输、隧道其他应用以及 X11 图形化应用,除了 ssh 客户端还有其他的 SSH 命令:

  • ssh-keygen - 为公共密钥身份验证创建密钥对
  • ssh-copy-id - 在服务器上配置授权的公钥
  • ssh-agent - 单个登录的私钥代理
  • ssh-add - 为代理添加密钥(key)的工具
  • scp - 具有类似 RCP 的命令接口的文件传输客户端
  • sftp - 具有FTP式命令接口的文件传输客户端
  • sshd - OpenSSH server

ssh 连接

ssh 命令格式如下:

ssh [options] destination [command]

其中 destination 是访问的主机(host)地址,可以是 IP 地址也可以是网址。ssh 默认使用当前用户访问主机,可以用 "user@destination" 格式指定用户。

ssh -p 22 pengguoyu@10.2.3.234

这里 -p 参数指定端口。如果是第一次访问该主机会有个提示,输入 "yes" 继续 ssh 连接,并且会将主机加入已知主机列表,下次访问就不会再有这个提示。

$ lssh -p 22 pengguoyu@10.2.3.234
The authenticity of host '10.2.3.234 (10.2.3.234)' can't be established.
ECDSA key fingerprint is SHA256:xVVX6QLT4aRdLVNcFPzC5nNDmz4R6a24+TRgI7GQnsQ.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.2.3.234' (ECDSA) to the list of known hosts.

继续连接会要求输入密码,以后每次连接也一样会要求密码验证。要注意跟平时在 windows 输入密码不同,这里输入密码不会显示星号 "*" 也没有其他任何显示,不要以为出什么问题了,把密码输入完整按回车即可。

pengguoyu@10.2.3.234's password: 

如果是经常需要连接的主机,可以使用 ssh key 验证,就不需要每次输入密码了。
先用ssh-keygen 命令创建密钥对,需要交互的地方直接按回车就行了。

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/matthew/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/matthew/.ssh/id_rsa
Your public key has been saved in /home/matthew/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:osroH+UURy8f4TPAtYOddbumEHsOvmuJXZeS+iIoWrE matthew@localhost.localdomain
The key's randomart image is:
+---[RSA 3072]----+
|      .o.o . .   |
|      ..* = . .  |
|     . + %   .   |
|      o o B   .  |
|   . o. S= ..o.  |
|    *. .. =+oo   |
|   E... o.+oo    |
| o.o.. o *.      |
|oo=..   oo+.     |
+----[SHA256]-----+

完成后密钥对保存在 ~/.ssh 目录。其中 id_rsa.pub 是公钥。

$ ls ~/.ssh
id_rsa  id_rsa.pub  known_hosts

然后用 ssh-copy-id 命令将公钥拷贝到主机。其实这个命令做的事是将公钥拷贝到主机的 ~/.ssh/authorized_keys 里,所以手动完成也是可以的。

$ ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 pengguoyu@10.2.3.234

成功以后再连接就不需要输入密码了。

$ ssh -p 22 pengguoyu@10.2.3.234
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-48-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

scp

scp 命令用于传输文件,scp 命令格式如下:

scp [-346ABCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file] [-J destination] [-l limit] [-o ssh_option] [-P port] [-S program] source ... target

这里设定端口是大写的 -P 而不是小写,限制带宽使用 -l 参数,单位为 Kbit/s.

远程主机文件/目录格式一般是:

[user@]host:[path]

从本地拷贝到服务器案例。

$ scp homo_sapiens_vep_102_GRCh38.tar.gz pengguoyu@10.2.3.234:/home/pengguoyu/Database/VEP_Cache

如果有多个服务器,甚至可以用 scp 从一个服务器传输到另一个服务器。

$ scp -3 -r scp://pengguoyu@10.1.1.122:220//Example/Mutect2/ \
 pengguoyu@10.2.3.234:/home/pengguoyu/Example/WGS/

在上面的命令,我把一台服务器里的 Mutect2 结果传输到另一台服务器。参数 -r 是递归传输目录下所有文件,参数 -3 设定通过本机中转传输,因为我的 2 台服务器之间无法直接连接,但是我的电脑可以分别连接 2 台服务器。第一个地址是 scp URI. 格式是 scp://[user@]host[:port][/path] 能够方便指定不同的端口。

常用参数

  • -P | 端口
  • -C | 压缩传输
  • -l | 限制带宽使用,单位 Kbit/s
  • -r | 用于目录拷贝,递归拷贝所有的文件
  • -q | 静默模式
  • -v | Verbose mode, 输出详细的日志信息
  • -p | 小写的 p, 保持原文件属性

参考资料
SSH Command - Usage, Options, Configuration
Using scp Command in Linux: 10 Practical Examples Explained

相关文章

网友评论

      本文标题:Linux SSH

      本文链接:https://www.haomeiwen.com/subject/abqhqltx.html