作为一名生信工程师,每天都要跟服务器打交道,如何登录到远程服务器上去呢?通常有两种方法:
-
通过专用软件登录,常用的有:
-
通过终端利用SSH连接,前提你要是Unix-like系统,如:
- Mac,自带终端或者iTerm2(推荐)
- Linux(Ubuntu, Centos等)
- Windows 10安装Ubutun子系统(具体可以百度搜索安装方法),推荐用自带的Windows Terminal
本文着重介绍一种优雅的,通过SSH免密登录远程服务器的方法。
1 什么是SSH
SSH是Secure Shell的缩写, 由IETF的网络小组(Network Working Group)所制定, 是建立在应用层基础上的安全协议。
SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。
不同主机间安全通信时进行SSH认证有2种方式:
a. 基于密码的认证:每次登录时都要输入用户名和密码,由于密码在网上传输,存在被攻击的风险;
b. 基于密钥的安全认证:配置完成后可以实现免密登录,这种方式更加安全和方便——不需要在网络上传递口令,只需要一次配置。常见的GitHub网站的SSH方式就是通过密钥进行的。
2 SSH登录命令
在终端内输入以下命令,其中@
符号前面的username
是用户名,后面的host
是远程主机的IP
地址:
$ssh username@host
3 配置SSH免密登录
生成密钥对,在终端中输入如下命令,注意美元符号$
代表命令提示符,下同。
$ssh-keygen
一路回车,在~/.shh
目录下生成了2个文件: id_rsa
(私钥,放在本地机器上), id_rsa.pub
(公钥,放到要远程登录的机器上)
然后通过密码形式登录目标服务器, 进入~/.ssh
目录, 新建一个名为authorized_keys
的文件,将id_rsa.pub
中的内容拷贝到其中。
ssh
登录,发现还是需要输入登录密码,这是因为还需要正确配置文件的权限。
a. 对于.ssh
目录以及其内部的公钥、私钥文件,当前用户至少要有执行权限,其他用户最多只能有执行权限;
b. 对于普通用户,建议设置成600权限:
$chmod 600 id_rsa
$chmod 600 authorized_keys
c. 对root用户,建议设置成644权限
$chmod 644 id_rsa
$chmod 644 authorized_keys
至此,再次通过ssh
命令远程登录服务器,以及本地电脑与服务器之间互相拷贝文件,都不再需要输入密码了。
顺便再介绍一下机器间拷贝文件的scp
命令:
- 本地文件拷贝到服务器
$scp file.txt username@host:/home/username/file.txt
,这个命令会将本地电脑上的file.txt
文件拷贝到服务器上的/home/username/
目录下
- 服务器文件拷贝到本地
$scp username@host:/home/username/file.txt file.txt
,这个命令会将服务器上的file.txt
拷贝到本地电脑的当前目录下。
正所谓“工欲善其事,必先利其器
”,登录事虽小,但却是每日的刚需。
优化我们的工作流程,从一件一件小事做起。