ssh tips
1. ssh/scp免密码
A服务器地址:10.8.216.25,下面简称A
B服务器地址:10.8.216.26,下面简称B
实现A登录B免密码。
1.1. 在A生成密钥对
无密码方式:
ssh-keygen -t rsa -P
自定义密码参数:
ssh-keygen -C <comment> -f <keyfile> -t rsa -P "<passphrase>"
执行上述命令,一路回车,会在当前登录用户的home目录下的.ssh目录下生成id_rsa和id_rsa.pub两个文件,分别代表密钥对的私钥和公钥,如下图所示:
1.2. 拷贝A的公钥(id_rsa.pub)到B
这里拷贝到B的root用户home目录下为例:
scp /root/.ssh/id_rsa.pub root@10.8.216.26:/root
1.3. 登录B
拷贝A的id_rsa.pub内容到.ssh目录下的authorized_keys文件中
cd /root
cat id_rsa.pub >> .ssh/authorized_keys
如图:
1.4. 登录或拷贝
此时在A中用SSH登录B或向B拷贝文件,将不需要密码
ssh root@10.8.216.26
scp abc.txt root@10.8.216.26:/root
2. 配置跳板机快速登录
2.1. 配置ssh config文件
ssh config 路径:~/.ssh/config
AddKeysToAgent yes
ServerAliveInterval 3
Host jump
HostName {jump_ip}
Port {port}
User {username}
forwardagent yes
identityfile ~/.ssh/id_rsa
Host *.gw
user {username}
port {port}
proxycommand ssh -W $(echo %h | sed -e "s/.gw$//"):%p jump
Host bj*
User {username}
Port {port}
proxycommand ssh -W 192.168.123.$(echo %h | awk -F 'bj' '{print $2}'):%p jump
多层跳板机
Host jump1
Hostname {jump1_ip}
Port {port}
User {username}
forwardagent yes
identityfile ~/.ssh/id_rsa
Host jump2
Hostname {jump2_ip}
Port {port}
User {username}
ProxyCommand ssh -q -x -W %h:%p jump1
Host *
Hostname %h
Port {port}
User {username}
ProxyCommand ssh -q -x -W %h:%p jump2
2.2. 记录机器文件
将关键字和IP写入文件记录,例如 ~/.my_hosts
。
示例:可以是IP + 环境等关键字,中间用空格隔开。
# release
192.168.123.11 rel-node-11
192.168.123.12 rel-node-12
# pre
192.168.321.13 pre-node-13
192.168.321.14 pre-node-14
192.168.321.15 pre-node-15
# dev
192.168.111.16 dev-node-16
192.168.111.17 dev-node-17
2.3. 安装fzf
# for mac
brew install fzf
2.4. 设置命令别名
设置 alias 到shell rc 文件(.bashrc / .zshrc)
alias goto="ssh \$(cat ~/.my_hosts | fzf | awk '{ printf(\"%s.gw\", \$1)}')"
2.5. 使用
使用别名命令,输入关键字搜索,点击回车进入指定机器。
也可以使用ssh命令登录机器别名。
ssh bj11
3. ssh配置项说明
可以通过man查看ssh配置说明
man ssh_config
配置文件示例:
Host jump
port 22
Host * !jump
StrictHostKeyChecking no
HostName %h
UserKnownHostsFile /dev/null
LogLevel ERROR
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh -p 22 -F /dev/null jump -W %h:%p
SendEnv LANG LC_*
配置项说明:
-
Host: 标识设备,
*
表示通配所有字符,!
表示例外通配。 -
StrictHostKeyChecking no:连接时不进行公钥交互确认操作。
-
UserKnownHostsFile /dev/null:不提示确认known_hosts文件。
-
ProxyCommand:代理命令
如果使用命令加参数的方式:
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ProxyCommand="ssh -p 22 jump -W %h:%p"
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.
最后修改 December 30, 2022: add linux notes (85fc35b)