ssh 远程登录


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