本文最后更新于 835 天前,其中的信息可能已经有所发展或是发生改变。
ssh & scp 介绍
个人平时的工作,除了本地还涉及多台 Linux 服务器,要从终端登录到各个服务器,操控服务器的终端
ssh
是登录的工具,包含免密登录等功能
scp
(server copy)本地和服务器间传文件的途径
ssh 登录
基本用法(远程服务器)
ssh user@hostname # 服务器用户名 @ IP 或 域名
首次登录陌生服务器有安全提示,允许
登录后,该服务器信息会记录在本地 ~/.ssh/known_hosts
中
# 指定端口: -p 端口号(不写默认22)
ssh user@hostname -p 22
- 云服务器默认 root 用户,用
adduser
添加非 root 用户并设置密码。之后用新用户名登录
如果上来就显示 Permission denied (publickey),就直接把公钥复制到服务器authorized_keys
配置文件(一般都要做)
创建 ~/.ssh/config
- 格式
Host server1
HostName 后面写IP地址或域名
User 后面写用户名
Host Lunar
HostName IP地址或域名
User 用户名
Host
后的名字可以代替 user@hostname
密钥登录(免密登录)
# 创建密钥(一般只需要一次)
ssh-keygen
之后 ~/.ssh/
会多两个文件:
id_rsa
:私钥id_rsa.pub
:公钥
将公钥传给要免密登录的服务器(服务器上的公钥与本地私钥配套)
- 云服务器,则存入服务器的
~/.ssh/authorized_keys
(没有就新建)github
等网站以及部分 IDE,填入公钥本质还是连接和验证
推荐以下省流操作 ↓↓↓
# 一键配置
ssh-copy-id Lunar
执行命令
在本地执行服务器上的命令,方便灵活。如果有 stdout ,服务端输出的同时,会重定向回终端
# 简单的例子
ssh user@hostname ls -a
或者
#单引号中的$i可以避免在本地求值,将字符串里的内容传到服务器后,在服务器上求值
ssh Lunar 'for ((i = 0; i < 10; i ++ )) do echo $i; done'
#双引号中的$i会在本地求值再传到服务器,用\$可以在本地当转义字符处理,到服务器上再求值
ssh Lunar "for ((i = 0; i < 10; i ++ )) do echo \$i; done"
scp 传文件
基本用法
scp 文件 目的地
# 如果有重名文件,直接覆盖
# 复制多个文件
scp 文件1 文件2 目的地
# 复制目录 前面加 -r
scp -r ~/tmp Lunar:/home/MCG/ # /开头的完整路径
# 从本地复制到服务器
scp -r Lunar:homework . # 非/开头的路径,则默认为服务器的~/
# 从服务器复制到本地
# 前面 -P(大写) 指定端口
scp -P 22 文件1 文件2 目的地
实用案例
快速同步各端 vim 和 tmux 配置(其他配置文件也一样)
scp ~/.vimrc ~/.tmux.conf Lunar: