批量加ssh key,无密码ssh登陆
1. ? ? 生成RSA Key pair,在跳转机上运行:
ssh-keygen -t rsa
然后一路回车跳过。
2. ? ? 将公钥的内容复制到 15机器上:
scp -P 12345 ?~/.ssh/id_rsa.pub dcplatform@10.125.70.15:/home/dcplatform/lx/add_auth_key
3. ? ? 进入10.125.70.15下的/home/dcplatform/lx/add_auth_key目录
4. ? ? 将 公钥加入测试环境的IP列表:
cat ip_qa.txt | ./add_auth_key.pl 22
5. ? ? 将 公钥加入生产环境的IP列表:
cat ip_prod.txt | ./add_auth_key.pl 12345
6. ? ? 退回跳转机,将以下代码加入 ~/.bashrc
#QA Env
alias 7='ssh dcplatform@10.131.18.7'
alias 6='ssh dcplatform@10.131.18.6'
alias 5='ssh dcplatform@10.131.18.5'
alias 4='ssh dcplatform@10.131.18.4'
alias 3='ssh dcplatform@10.131.18.3'
#Prod Env
alias 50='ssh -p 12345 dcplatform@10.125.42.50'
alias 51='ssh -p 12345 dcplatform@10.125.42.51'
alias 52='ssh -p 12345 dcplatform@10.125.42.52'
alias 53='ssh -p 12345 dcplatform@10.125.42.53'
alias 100='ssh -p 12345 dcplatform@10.125.42.100'
alias 187='ssh -p 12345 dcplatform@10.133.10.187'
alias 15='ssh -p 12345 dcplatform@10.125.70.15'
alias 16='ssh -p 12345 dcplatform@10.125.70.16'
alias 17='ssh -p 12345 dcplatform@10.125.70.17'
alias 18='ssh -p 12345 dcplatform@10.125.70.18'
alias 19='ssh -p 12345 dcplatform@10.125.70.19'
7. ? ? 运行source ~/.bashrc,以后只需要输入15,50等数字就可以直接登录相应服务器了。
附:add_auth_key.pl代码
?
?
#!/usr/bin/perl -wuse strict;use Expect; #$Expect::Exp_Internal = 1;#$Expect::Log_Stdout = 1;my $timeout = 3;while(<STDIN>){ chomp; my $ip = $_; printf "installing rsa key...\n"; printf $ip."\n"; my $exp = Expect->spawn("scp -o StrictHostKeyChecking=no -P $ARGV[0] id_rsa.pub dcplatform\@$ip:~/") or die "Couldn't spawn ssh, $!"; $exp->raw_pty(1); $exp->log_file("output.log"); if ($exp->expect($timeout,'password')) { $exp->send("y6a2!Hsa:5!h_D3\r"); } $exp->soft_close(); $exp = Expect->spawn("ssh -o StrictHostKeyChecking=no -p $ARGV[0] -l dcplatform $ip") or die "Couldn't spawn ssh, $!"; $exp->raw_pty(1); if ($exp->expect($timeout,-re=>'password:')) { $exp->send("y6a2!Hsa:5!h_D3\n"); } $exp->expect($timeout, -re=>'[$#]'); $exp->send("mkdir -p .ssh\n"); $exp->expect($timeout, -re=>'[$#]'); $exp->send("cat id_rsa.pub >> ~/.ssh/authorized_keys\n"); $exp->expect($timeout, -re=>'[$#]'); $exp->send("chmod 700 .ssh; chmod 600 .ssh/authorized_keys\n"); $exp->send("exit\n"); $exp->soft_close();}printf "All done...\n";??
?