服务器远程登录配置

这是一篇首次使用高性能服务器的记录,包含linux和windows

ssh

linux

方案: ssh + scp

简介: 使用ssh实现无密码安全登录,scp实现文件传输

ssh

只需要用到两个命令

  • ssh-keygen 生成公钥、私钥
  • ssh-copy-id 上传公钥到服务器

参数详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ ssh-keygen (选项)

-b:指定密钥长度;
-e:读取openssh的私钥或者公钥文件;
-C:添加注释;
-f:指定用来保存密钥的文件名;
-i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
-l:显示公钥文件的指纹数据;
-N:提供一个新密语;
-P:提供(旧)密语;
-q:静默模式;
-t:指定要创建的密钥类型。

$ ssh-copy-id [-i [identity_file]] [user@]machine
-i:指定公钥文件

tips:

  • ssh-copy-id 命令会把本地主机的公钥复制到远程主机的 authorized_keys文件中,
  • ssh-copy-id命令也会给远程主机的用户主目录和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。
  • 删除已配置好的秘钥只需删除 ~/.ssh文件即可

实际命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ ssh-keygen -t rsa # 使用RSA算法创建私钥和公钥
# 输出如下
# Generating public/private rsa key pair.
# Enter file in which to save the key (/home/matrix/.ssh/id_rsa): 输入秘钥文件名
# 上面一行如果没用过秘钥就直接enter,若有多个秘钥建议改名,默认生成至家目录(~/)下
# 我使用 simplehpc (服务器的名字)
# Enter passphrase (empty for no passphrase):   输入一个密码
# Enter same passphrase again:   再次输入密码
# 密码用于加密私钥和公钥,建议输入

# 上一条命令若未改名,直接执行此命令,输入密码即可成功
$ ssh-copy-id username@remote-server

# 若改名 则执行下列命令
$ssh-copy-id -i 公钥路径 username@remote-server
# 公钥后缀为 .pub ,我的公钥位于 ~/.ssh/simplehpc.pub ,所以我的命令如下
# ssh-copy-id -i ~/.ssh/simplehpc.pub username@remote-server

scp

scp(跨机远程拷贝)是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。

参数详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ scp [参数] [原路径] [目标路径]

-1 强制scp命令使用协议ssh1
-2 强制scp命令使用协议ssh2
-4 强制scp命令只使用IPv4寻址
-6 强制scp命令只使用IPv6寻址
-B 使用批处理模式(传输过程中不询问传输口令或短语)
-C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p 留原文件的修改时间,访问时间和访问权限。
-q 不显示传输进度条。
-r 递归复制整个目录。
-v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port 注意是大写的P, port是指定数据传输用到的端口号
-S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

命令示例

1
2
3
4
5
6
7
8
9
10
11
12
# 复制文件
$ scp local_file remote_username@remote_ip:remote_folder
$ scp local_file remote_username@remote_ip:remote_file
$ scp local_file remote_ip:remote_folder
$ scp local_file remote_ip:remote_file

# 指定了用户名,命令执行后需要输入用户密码;
# 如果不指定用户名,命令执行后需要输入用户名和密码

# 复制目录
$scp -r local_folder remote_username@remote_ip:remote_folder
$scp -r local_folder remote_ip:remote_folder

windows

方案: putty + filezilla

参考链接