SSH 和 SCP
1. SSH 登录
基本用法
远程登录服务器
# ssh 用户名@IP地址或域名
ssh user@hostname [-p 22] # 22 是 ssh 默认端口
第一次登录时会有安全提醒,输入 yes 缺人要远程登录服务器,之后输入密码即可登录成功。登录成功之后会将服务器的信息记录到 ~/.ssh/known_hosts
文件中,下次登录的时候就不会再显示安全提示了。
配置别名登录
在 .ssh/
目录下创建 config
文件
设置服务器别名、User、HostName,可以为多个服务器设置别名。
Host myserver
HostName IP地址或域名
User 用户名
Host myserver2
HostName IP地址或域名
User 用户名
之后再 ssh 连接服务器的时候就不用之前输入用户名@HostName 那么麻烦了,直接使用别名登录 ssh myserver
,输入密码登录。
免密登录
使用密钥可以免密登录,每次输入密码很麻烦对不对~
先生成密钥
ssh-keygen
生成的密钥会放在 ~/.ssh/
下,一个公钥一个私钥
id_rsa
:私钥(私有的东西不要给别人看!!!)id_rsa.pub
:公钥
之后想要免密登录哪个服务器,只需把公钥传到服务器上的 ~/.ssh/authorized_keys
文件中。即可免密登录。
也可以使用如下命令一键添加公钥:
ssh-copy-id myserver
执行命令
设置了免密登录之后,可以在本地终端使用 ssh
在远程服务器上执行命令。
ssh user@hostname command
比如:显示服务器家目录下的所有文件
ssh myserver ls -a
还可以执行一段 shell
脚本
# 单引号中的$i可以求值, 双引号中的$i不可以求值
ssh myserver 'for ((i = 0; i < 10; i ++ )) do echo $i; done'
2. SCP 传文件
基本用法
ssh src to
将 src
路径下的文件 / 文件夹复制到服务器路径 to
中
一次复制多个文件
scp src1 src2 to
scp
可以通过 -P(大 P,ssh 是小 p)
指定端口
scp -P 22 src1 to
示例:
复制文件夹:将本地家目录下的 tmp
文件夹复制到远程服务器 myserver 上的家目录下
scp -r ~/tmp myserver:/home/用户名
或者直接使用 myserver:
,默认复制到的路径就是家目录下
scp -r ~/tmp myserver:
从远程服务器 myserver 上复制 tmp
文件夹到本地家目录下
scp -r myserver:tmp . # . 表示当前所在目录
复制文件:将本地家目录下的 a.txt
文件复制到远程服务器 myserver 上的家目录下
scp ~/a.txt myserver:
从远程服务器 myserver 上复制 ~/tmp/a.txt
文件到本地家目录下
scp myserver:tmp/a.txt . # . 表示当前所在目录
有了 scp 之后就可以配置其他服务器了,比如 vim
和 tmux
,直接将本地的配置文件复制到远程服务器就 OK 了,太好用了!!!
scp ~/.vimrc ~/.tmux.conf myserver:
从服务器下载文件到 Windows 本地
不能直接使用 AC Terminal 下载文件到自己的本地,AC Terminal 相当于是另一个机器,只能下载到这台机器上。
所以需要使用本地 Shell,我用的是 Windows Terminal
cd
进入要存放文件的位置,比如cd D:
scp -r myserver:tmp .
:将 myserver 上的 tmp 复制到当前目录下。
作业代码
homework_0
在 ~/.ssh 目录下创建 config 文件,配置连接别名 myserver、用户名和 IP
ssh-keygen 生成密钥
将公钥上传到服务器上 ssh-copy-id myserver
然后就可以 ssh 免密登录了
homework_1
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
ssh myserver mkdir -p ./homework/lesson_4/homework_2/
scp -r dir/ myserver:~/homework/lesson_4/homework_2/
homework_3
mkdir dir
scp -r myserver:/var/lib/locales/supported.d dir/
homework_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
#! /bin/bash
ssh myserver mkdir homework/lesson_4/homework_4/\"$1\"
remote_rmdir.sh
#! /bin/bash
# 注意这里 $1 要用 "" 包起来,防止输入参数有空格
ssh myserver rm -r homework/lesson_4/homework_4/\"$1\"