AcWing「Linux基础课」第 4 讲 SSH 和 SCP

SSH 登录

基本用法

远程登录服务器

1
2
# ssh 用户名@IP地址或域名
ssh user@hostname [-p 22] # 22 是 ssh 默认端口

第一次登录时会有安全提醒,输入 yes 缺人要远程登录服务器,之后输入密码即可登录成功。登录成功之后会将服务器的信息记录到 ~/.ssh/known_hosts 文件中,下次登录的时候就不会再显示安全提示了。

配置别名登录

.ssh/ 目录下创建 config 文件

设置服务器别名、User、HostName,可以为多个服务器设置别名。

1
2
3
4
5
6
7
Host myserver
HostName IP地址或域名
User 用户名

Host myserver2
HostName IP地址或域名
User 用户名

之后再 ssh 连接服务器的时候就不用之前输入用户名@HostName 那么麻烦了,直接使用别名登录 ssh myserver,输入密码登录。

免密登录

使用密钥可以免密登录,每次输入密码很麻烦对不对~

先生成密钥

1
ssh-keygen

生成的密钥会放在 ~/.ssh/ 下,一个公钥一个私钥

  • id_rsa:私钥(私有的东西不要给别人看!!!)
  • id_rsa.pub:公钥

之后想要免密登录哪个服务器,只需把公钥传到服务器上的 ~/.ssh/authorized_keys 文件中。即可免密登录。

也可以使用如下命令一键添加公钥:

1
ssh-copy-id myserver

执行命令

设置了免密登录之后,可以在本地终端使用 ssh 在远程服务器上执行命令。

1
ssh user@hostname command

比如:显示服务器家目录下的所有文件

ssh myserver ls -a

还可以执行一段 shell 脚本

1
2
# 单引号中的$i可以求值, 双引号中的$i不可以求值
ssh myserver 'for ((i = 0; i < 10; i ++ )) do echo $i; done'

SCP 传文件

基本用法

1
ssh src to

src 路径下的文件 / 文件夹复制到服务器路径 to

一次复制多个文件

1
scp src1 src2 to

scp 可以通过 -P(大 P,ssh 是小 p) 指定端口

1
scp -P 22 src1 to

示例:

复制文件夹:将本地家目录下的 tmp 文件夹复制到远程服务器 myserver 上的家目录下

1
scp -r ~/tmp myserver:/home/用户名

或者直接使用 myserver:,默认复制到的路径就是家目录下

1
scp -r ~/tmp myserver:

从远程服务器 myserver 上复制 tmp 文件夹到本地家目录下

1
scp -r myserver:tmp . # . 表示当前所在目录

复制文件:将本地家目录下的 a.txt 文件复制到远程服务器 myserver 上的家目录下

1
scp ~/a.txt myserver:

从远程服务器 myserver 上复制 ~/tmp/a.txt 文件到本地家目录下

1
scp myserver:tmp/a.txt . # . 表示当前所在目录

有了 scp 之后就可以配置其他服务器了,比如 vimtmux,直接将本地的配置文件复制到远程服务器就 OK 了,太好用了!!!

1
scp ~/.vimrc ~/.tmux.conf myserver:

从服务器下载文件到 Windows 本地

不能直接使用 AC Terminal 下载文件到自己的本地,AC Terminal 相当于是另一个机器,只能下载到这台机器上。

所以需要使用本地 Shell,我用的是 Windows Terminal

  1. cd 进入要存放文件的位置,比如 cd D:
  2. scp -r myserver:tmp .:将 myserver 上的 tmp 复制到当前目录下。

作业代码

homework_0

1
2
3
4
在 ~/.ssh 目录下创建 config 文件,配置连接别名 myserver、用户名和 IP
ssh-keygen 生成密钥
将公钥上传到服务器上 ssh-copy-id myserver
然后就可以 ssh 免密登录了

homework_1

1
2
3
4
ssh myserver mkdir -p ./homework/lesson_4/homework_1/
scp main.cpp myserver:~/homework/lesson_4/homework_1/
mkdir dir
scp myserver:/etc/lsb-release ./

homework_2

1
2
ssh myserver mkdir -p ./homework/lesson_4/homework_2/
scp -r dir/ myserver:~/homework/lesson_4/homework_2/

homework_3

1
2
mkdir dir
scp -r myserver:/var/lib/locales/supported.d dir/

homework_4

1
2
3
4
ssh myserver mkdir -p ./homework/lesson_4/homework_4/
touch remote_mkdir.sh
touch remote_rmdir.sh
chmod +x remote_mkdir.sh remote_rmdir.sh

remote_mkdir.sh

1
2
3
#! /bin/bash

ssh myserver mkdir homework/lesson_4/homework_4/\"$1\"

remote_rmdir.sh

1
2
3
#! /bin/bash
# 注意这里 $1 要用 "" 包起来,防止输入参数有空格
ssh myserver rm -r homework/lesson_4/homework_4/\"$1\"

image-20220401082319425.png

Author: tonngw
Link: https://tonngw.com/2022/04/02/AcWing/第 4 讲 SSH 和 SCP/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.