记录我从无到有的历程。
听说windows上写一个bat脚本可以很轻松实现putty免密登录服务器,我就尝试了。
start "" "C:\Users\Mongo\Desktop\putty.exe" "[email protected]" -pw "Mongobz"
然而似乎没有成功显示:Access denied。我没有继续尝试,就用了下面这种方式。
预备软件:putty.exe和puttygen.exe,以及ftp传输工具。
1.生成公钥和密钥(id_rsa和id_rsa.pub)
ssh-keygen -t rsa //一直回车到退出即可
2.将公钥内容追加到 authorized_keys
linux去到~/.ssh目录下
# 若 authorized_keys 已经存在,则跳过 touch 创建文件这一步
# 如果是自己创建的authorized_keys文件,注意权限必须是700或600
cat id_rsa.pub >> authorized_keys //导入公钥
3.用ftp工具将id_rsa下载到windows
4.打开puttygen.exe工具,点击Conversions(转换)->Import Key(导入密钥)->save private key(保存密钥)->自己命名保存即可
5.打开putty.exe,在Session(会话中)的HostHome添加服务器IP地址(这里如果仅添加地址,还要再Data中添加登录用户名),所以这里直接来方便的,添加用户名@IP即可。
6.然后点击SSH->Auth->Browse添加那个转换后的密钥即可。
7.最后在Session(会话)中给配置起个名字,然后保存配置,点击运行(Open)。
putty显示Sever refused our key
解决方案:我这里是用户名填写错误了,我密钥是放在本用户目录下的,不是root用户,所以我就修改了一下用户配置保存就ok了。
网上查看到出现这个错误还有以下几种原因,若有此错误者可自行查找相关资料。
1、.ssh文件夹权限错
2、SElinux导致
3、sshd配置不正确
又查到了putty的一些命令行指令:
http://the.earth.li/~sgtatham/putty/0.54/htmldoc/Chapter3.html#3.7 //这里面很多命令
这里记录一些:
1. 在命令行启动session
在命令行启动session的指令为:
putty.exe [-ssh | -telnet | -rlogin | -raw] [user@]host
标准指令介绍
2. 选择协议:-ssh, -telnet, -rlogin, -raw
这是putty支持的4个协议,在建立session时,我们需要指定使用的协议
3.-l:指定登录用户名
4. -pw:指定密码(明文密码,在编写代码时得考虑这里的安全性)
5.-load:加载一个已保存的session
在使用putty时,可以将session保存,下次连接时,无需再进行配置即可直接连接。在通过命令行创建session时,可以直接使用这个指令,如:
putty.exe -load "server_session" xxx@yyyy
其中xxx为使用的用户名,yyyy为我们要连接的远程主机ip地址。
6. -m:指定包含需远程执行的指令的本地文件
如假设我们在cmd.txt这个文件中写了我们需要在远程主机上执行的指令集合,则可以按如下方法在远程主机上执行这些指令:
putty.exe -ssh xxx@yyyy -m "cmd.txt"
7. -i:指定SSH秘钥
这个参数用于指定需要使用的SSH秘钥文件,假如远程主机采用秘钥文件的方式来进行身份验证,则可以使用如下指令来建立session:
putty.exe -ssh xxx@yyyy -i privatekey.ppk(自己的私钥文件地址)
PS:更多指令可以自行查看上方的网站
通过这些命令再次写bat脚本,成功了!编写3中方式如下:
1.这是一种方式,用的SHH密钥
start "" "C:\Users\Joker\Desktop\putty.exe" -ssh "用户名@服务器IP" -i "D:\putty\xxx\id_rsa.ppk"
2.这是一种方式,用的加载session
start "" "C:\Users\Joker\Desktop\putty.exe" -load "session名字" 用户名@服务器IP
3.这种方式解决了前传中的失败情况,用的是用户名密码登录
start "" "C:\Users\Joker\Desktop\putty.exe" -ssh 用户名@服务器IP -l 用户名 -pw 密码