摘要
-
ssh、scp命令的使用以及免密登录的设置方法
-
本文基于CentOS8(x86_64)
ssh
3.1 登录
1 2 3 4 5 6 7 8
| ssh user@ip : 默认连接22端口,不同用户名
ssh -l user ip
ssh -p 22122 user@ip : 不同用户名,指定其它端口 ssh -p 22122 ip : 相同用户名
|
3.2 远程执行命令或脚本
1 2 3 4 5 6 7 8 9 10
| ssh user@ip "command" 示例: ssh user@ip "pwd" ssh user@ip "sh /usr/local/run.sh"
ssh user@ip -t "command" 示例: ssh user@ip -t "top"
|
3.3 远程服务器上执行本地的脚步
上面都是执行远程服务器上的脚本,如果要在远程服务器上执行本地的脚步,需要使用如下方式:
1 2 3 4 5
| ssh user@ip < script.sh
ssh user@ip 'bash -s' < script.sh param1 param2
|
scp
1 2 3 4 5 6 7
| scp xxx.txt user@ip:~/xxx.txt : 默认连接22端口,不同用户名 scp -P 22122 xxx.txt user@ip:~/xxx.txt : 不同用户名,指定其它端口 scp -P 22122 xxx.txt ip:~/xxx.txt : 相同用户名
scp -P 22122 user@192.168.1.219:~/xxx.txt xxx.txt
|
免密登录(密钥登录)
小贴士
默认情况下,ssh或者scp都需要输入登录密码,如果不想输入密码,可以配置免密登录(密钥登录)
ssh远程执行命令和scp远程传输如果配合免密登录,就可以为脚本自动化打下基础。
1、如果希望从ServerA免输入passwd就可以ssh到ServerB,先在ServerA上执行:
1 2 3 4 5 6 7 8 9 10 11 12 13
| $ ssh-keygen -t rsa 中间会让你输入密码并且确认生成目录,默认存放在本地用户的 ~/.ssh目录下 一路回车就好 会生成:id_rsa(密钥) id_rsa.pub(公钥)
-t : 指定加密类型,不指定默认rsa,支持 dsa|ecdsa|ed25519|rsa -b : 指定密钥长度,默认2048位 -C : 注释,用于识别这个密钥,公钥内容最后会附加这个注释,默认为“用户@主机名” -f : 生成的密钥文件名称
$ ssh-keygen -t rsa -b 4096 -C "hanqunfeng" -f ~/.ssh/sshkey 则 ~/.ssh 路径下会生成两个文件:sshkey 和 sshkey.pub
|
2、把id_rsa.pub(公钥)的内容保存到ServerB的用户目录下的.ssh目录下的authorized_keys文件中
1 2 3 4 5 6 7 8 9
| 方式1: ServerA命令行执行 ssh-copy-id ~/.ssh/id_rsa.pub user@ServerB_IP -p : 指定端口 -i : 指定私钥路径
方式2: 打开ServerA上的~/.ssh/id_rsa.pub,复制里面内容,粘贴到ServerB的对应用户下的~/.ssh/authorized_keys文件中,保存退出, 如果authorized_keys文件不存在就创建,如果authorized_keys文件中已有内容则粘贴到最后即可。
|
注意:ServerB 的 .ssh 目录的权限和 authorized_keys 的权限分别是 700 和 600
1 2
| chmod 700 -R .ssh chmod 600 authorized_keys
|
至此,再次从ServerA通过ssh或者scp连接到ServerB时就不会提示你输入密码啦
实际上证书的创建在任何服务器上进行都行,只需要让ServerA拥有私钥,ServerB的对应用户下的~/.ssh/authorized_keys
文件中配置上公钥
1 2 3 4 5
| ssh user@ServerB_IP
ssh -i "~/.ssh/script.pem" user@ServerB_IP
|
默认情况下,sshd的密钥认证方式是开启的,可以查看ServerB的/etc/ssh/sshd_config
中的配置
1 2 3 4
| PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
|
config配置登录信息
通过config配置,可以进一步简化我们使用ssh和scp的方式
1.在用户根目录下的.ssh文件内创建config文件,用于保存ssh登陆主机的相关信息,内容格式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| Host aliyun User root HostName 8.130.53.111 Port 22 IdentityFile ~/.ssh/id_rsa
RemoteCommand sudo su && cd RequestTTY yes
Host 10.10.* User root Port 22 IdentityFile ~/.ssh/id_rsa ProxyCommand ssh aliyun -W %h:%p RemoteCommand sudo su && cd RequestTTY yes
Host * IdentityFile ~/.ssh/id_rsa Compression yes ServerAliveInterval 60 ServerAliveCountMax 5 ControlMaster auto ControlPath ~/.sockets/%r@%h-%p ControlPersist 4h StrictHostKeyChecking no UserKnownHostsFile /dev/null ConnectTimeout 15 StrictHostKeyChecking no
|
使用方法
1)ssh 登录:
1 2
| ssh aliyun ssh 10.10.123.123
|
2)scp 传输文件
1 2 3 4 5 6
| scp ./file aliyun:~/ scp ./file 10.10.123.123:~/
scp aliyun:~/file ./ scp 10.10.123.123:~/file ./
|
修改sshd端口和关闭密码登录
1.sshd默认端口是22,建议生产环境进行修改
1 2 3
| $ vim /etc/ssh/sshd_config
Port 22122
|
2.关闭密码登录
如果配置了密钥登录,可以禁止密码登录,建议生产环境进行修改
1 2 3
| $ vim /etc/ssh/sshd_config
PasswordAuthentication no
|
3.重启SSH服务:
4.查看sshd端口状态
1 2
| netstat -tunpl | grep sshd tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 20652/sshd
|