一个计算机技术爱好者与学习者

0%

shell命令之ssh

1. 创建用户

创建voidking用户,并添加sudo权限:

1
2
3
useradd -m voidking -s /bin/bash
passwd voidking
adduser voidking sudo

2. 生成密钥对

1
2
3
4
5
# 生成 ~/.ssh/id_rsa 和 ~/.ssh/id_rsa.pub
ssh-keygen

# 生成 voidking_rsa 和 voidking_rsa.pub,注释内容为 voidking@qq.com
ssh-keygen -C "voidking@qq.com" -f ./voidking_rsa

3. 配置免密登录

添加公钥到远程机器

1
2
3
4
5
6
7
8
9
# ~/.ssh/id_rsa.pub 的内容追加到远程机器的 ~/.ssh/authorized_keys 中
ssh-copy-id voidking@hostname

# 指定public key,追加到远程机器的 ~/.ssh/authorized_keys 中
ssh-copy-id -i ~/.ssh/id_rsa.pub voidking@hostname
ssh-copy-id -i ~/.ssh/id_rsa.pub voidking@hostname -p 22

# 测试登录
ssh voidking@hostname

注意:authorized_keys文件权限为600。如果配置好了sshd,但是无法使用密钥登录机器,请检查authorized_keys文件权限。

4. 密钥添加失败问题

如果ssh-copy-id报错cannot create .ssh/authorized_keys: Operation not permitted
或者手动编辑authorized_keys后无法保存,chmod也无法改变authorized_keys文件的权限。

那么可能是因为authorized_keys被加锁了,防止误删,需要先进行解锁。

1
chattr -i ~/.ssh/authorized_keys

参考文档chattr命令 – 更改文件隐藏属性

5. 测试ssh连接

1
ssh -vvv root@192.168.56.100 /bin/true

6. ssh执行远程命令

执行远程命令很简单,直接ssh后面跟着命令就可以了。

1
ssh root@192.168.56.100 "echo helloworld"

那如果远程命令里面包含双引号怎么办?变成单引号,或者添加转义。

1
2
ssh root@192.168.56.100 "echo 'helloworld'"
ssh root@192.168.56.100 "echo \"helloworld\""

那如果需要远程命令里使用变量怎么办?添加转义。

1
ssh root@192.168.56.100 "host=\$(hostname);echo \"\${host}\""

7. 批量添加开机启动命令

已知主机列表hosts.txt内容为:

1
2
192.168.56.101
192.168.56.102

需求:给主机列表中的机器添加开机启动命令

脚本:

1
for i in `cat hosts.txt`; do ssh $i "echo '/home/voidking/start.sh' | sudo tee -a /etc/rc.local";done