ssh 远程登录
SSH是一种网络协议,用于计算机之间的加密登录。
用户名密码登陆
ssh user@host
ssh host #本地用户名和服务器上用户名一致
指定端口登陆
ssh -p 5050 user@host
公钥登录
原理: 就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
步骤:
生成公钥
ssh-keygen
会在$HOME/.ssh/目录下 , 会新生成两个文件 : id_rsa.pub(公钥)和id_rsa(私钥) .
修改远程主机配置
打开远程主机的/etc/ssh/sshd_config 文件, 取消前面”#”注释
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
将公钥传送到远程主机上面
ssh-copy-id user@host
#or
ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
这条命令由多个语句组成,依次分解开来看:
-
”$ ssh user@host”,表示登录远程主机;
-
单引号中的mkdir .ssh && cat » .ssh/authorized_keys,表示登录后在远程shell上执行的命令:
-
”$ mkdir -p .ssh”的作用是,如果用户主目录中的.ssh目录不存在,就创建一个;
-
‘cat » .ssh/authorized_keys’ < ~/.ssh/id_rsa.pub的作用是,将本地的公钥文件~/.ssh/id_rsa.pub,重定向追加到远程文件authorized_keys的末尾。
Mac 上使用 ssh-copy-id
安装 ssh-copy-id
brew install ssh-copy-id
用法,同上
ssh-copy-id user@host
自动生成ssh-key 并复制到多台主机
yum -y install expect #安装expect预期交互
- 生成sshkey 脚本
#!/usr/bin/expect
#set enter "\n"
spawn ssh-keygen -t dsa
expect {
"*.ssh/id_dsa)" {send "\n\r";exp_continue}
"*(empty for no passphrase)" {send "\n\r";exp_continue}
"*again" {send "\n\r"}
}
expect eof
- 复制 sshkey 到多服务器
password=" "
for i in 170 172 174
do
expect << EOF
spawn ssh-copy-id 192.168.20.$i
expect "(yes/no)?" {send "yes\r"}
expect "password:" {send "$password\r"}
expect "#" {send "exit\r"}
alias s$i="ssh '192.168.20.$i'"
EOF
done
for i in 170 172 174
do
alias s$i="ssh '192.168.20.$i'"
done