分类: LINUX
2012-03-12 09:48:43
如果执行ssh-keygen -i -f lgz-keys.pub >> authorized_keys这句总是出现lgz-keys.pub: Permission denied 那么就关闭selinux ,/etc/selinux/config,把 SELINUX=enforcing 注释掉:#SELINUX=enforcing ,然后新加一行为:SELINUX=disabled
(1)SSH Secure Shell的Edit菜单àSetting菜单,找到Keys,然后Generate New..开始生成新密钥;
(2)下一步(全部默认即可),选择DSA吧(RSA也可以,但RSA和DSA差不多,DSA耗资源少点,其实这点资源消耗可以忽略不计);
(3)下一步,File,取个文件名:zx-ssh,别的可以不填直接点“完成”,Passphrase写了则每次连接时需要输入,我喜欢连密码都不输;为了实现自动登录,passphrase为空,但这样不安全,还是设置一个passphrase吧,如果你的ssh secure shell界面不关闭,输入一是passphrase就可以一直好用的,有passphrase可以防止私钥被人盗用;
(4)找到密钥存放的目录:我是windows7,在C:\Users\ZX\AppData\Roaming\SSH\UserKeys,有2个文件:zx-ssh(私钥,与公钥一起存放到本地或复制到U盘,在没有使用该过密钥的机器上要访问服务器,则需要导入密钥:SSH Secure Shell的Edit菜单àSetting菜单,找到Keys,然后Import导入,往往在Import是,要求你输入的是公钥文件名,没关系,导入公钥则私钥也导入成功,在配置文件夹中会自动生成2个文件,就是导入的公钥和私钥;zx-ssh.pub(公钥,上传到服务器用户主目录中,等待转换格式,需要转换为openssh格式才可以被服务器识别);到此为止,windows这边已经准备好了。
(5)服务器端(以CentsOS6.2为例),修改配置文件:vi/etc/ssh/sshd_config
启用ChallengeResponseAuthentication no #启用此项才可以真正取消密码验证
启用UsePAM yes
(6)将生产的公钥(zx-ssh.pub),上传到服务器用户主目录(自己想办法传),复制到用户主目录下的.ssh目录中,然后进行格式转换(转换为openssl格式):
cd /root/.ssh/
ssh-keygen -i -f zx-ssh.pub>>authorized_keys #转换格式openss格式,并将公钥导入到authorized_keys文件中
chmod 640 authorized_keys#设置权限,使该文件仅允许属主读写
rm zx-ssh.pub#删除上传的公钥,要不然留住也没用
这里要注意一个问题,就是这个linux主机如果有多个公钥,要注意每个公钥后面需要有个回车或是换行,不能将多个公钥直接罗列在一行。
应该重新检查一下你的authorized_keys的权限(640)。也可能要检查.ssh目录的权限,.ssh目录应该对“组用户”(group)和“其它用户”(other)没有写的权限。运行下面的命令来取消“组用户”(group)和“其它用户”(other)对于.ssh目录的写权限(740):chmod go-w ~/.ssh(也可以chmod 740 ~/.ssh,一样的)。
ssh出现permission denied (publickey)问题:
修改/etc/ssh/sshd-config文件.
将其中的PermitRootLogin no修改为yes
PubkeyAuthentication yes修改为no
AuthorizedKeysFile .ssh/authorized_keys前面加上#屏蔽掉,
PasswordAuthentication no修改为yes就可以了。
vi /etc/ssh/sshd-config (详细说说sshd-config的配置解释)
Subsystem sftp /usr/libexec/openssh/sftp-server
Port 22
Protocol 2
PermitRootLogin no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
#CACertificateFile /etc/ssh/ca/ca.cert
PasswordAuthentication no
PermitEmptyPasswords no
PrintMotd no
ChallengeResponseAuthentication no
UseDNS no
ClientAliveInterval 60
Port 22 # SSH 预设使用 22 这个 port,您也可以使用多的 port !亦即重复使用 port 这个设定项目即可!
Protocol 2 # 选择的 SSH 协议版本,可以是 1 也可以是 2 ,如果要同时支持两者,就必须要使用 2,1 这个分隔了
PermitRootLogin no # 是否允许 root 登入!预设是允许的,但是建议设定成 no!
PubkeyAuthentication yes # 是否允许 Public Key
AuthorizedKeysFile .ssh/authorized_keys # 上面这个在设定若要使用不需要密码登入的账号时,那么那个账号的存放档案所在档名!
PasswordAuthentication no # 是否需要密码的验证
PermitEmptyPasswords no # 若上面那一项如果设定为 yes 的话,这一项就最好设定为 no ,这个项目在是否允许以空的密码登入!当然不许!
PrintMotd no # 登入后是否显示出一些信息呢?例如上次登入的时间、地点等
ChallengeResponseAuthentication no # 是否启用其它的 PAM 模块!启用这个模块将会导致 PasswordAuthentication 设定失效!
UseDNS no
ClientAliveInterval 60
用:man sshd_config可以看到完整的说明
参考:1:http://blog.chinaunix.net/uid-9881170-id-348605.html2:http://www.blogjava.net/dongbule/archive/2011/01/04/342275.html