我想创建一个 .pem 文件来连接到服务器。
我知道我可以使用 ssh-keygen,但我想将它用于特定用户,并且我需要一个可以为我完成所有过程的脚本。我的需要是在服务器 X 上运行该脚本一次,因此每次我想要连接到 X 服务器时,我都可以在我的计算机中使用该 .pem 文件来连接到 X 服务器。
答案1
我建议以相反的方式进行此操作。
无需将私钥存放在远程计算机上。
在本地计算机上生成密钥对:
ssh-keygen -f .ssh/somekey -t rsa -b 4096
然后复制到远程机器上
ssh-copy-id -i .ssh/somekey user@hostname
然后调整你的本地
.ssh/config
:
$ cat << BLURB >> .ssh/config
Host shorthand
HostName server.com
User serveruser
IdentityFile ~/.ssh/somekey
BLURB
您可以轻松地将这三个步骤包含在脚本中genandcopykey.sh
:
#!/bin/bash -
# USAGE: ./genandcopykey.sh [email protected] [email protected] ...
#
# DESCRIPTION: creates an ssh-keypair, copies pubkey to remotehost
# and updates .ssh/config to use it
set -o nounset # exit on unset variables.
set -o errexit # exit on any error.
unalias -a # avoid rm being aliased to rm -rf and similar issues
LANG=C # avoid locale issues
for item in $@; do
remoteuser="${item%@*}" # everything in front of the first "@"
remotehost="${item#*@}" # everything after
ssh-keygen -f "${HOME}/.ssh/${item}" -t rsa -b 4096
ssh-copy-id -i "${HOME}/.ssh/${item}.pub" "$item"
printf '%s\n' "
Host $remotehost
HostName $item
User $remoteuser
IdentityFile ${HOME}/.ssh/${item}" >> $HOME/.ssh/config
done
您可能仍然想向脚本添加选项和使用函数。这只是一个简短的示例,缺乏对不存在的主机或.ssh
.
答案2
我找到了一种方法,但没有找到有关如何操作的答案,所以我发布了它。
#! /bin/bash
#Based on https://linuxaws.wordpress.com/2017/07/17/how-to-generate-pem-file-to-ssh-the-server-without-password-in-linux/
user=$(echo "$USER")
ssh-keygen << EOF
$user
EOF
mv $user $user.pem
sudo chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
sudo chmod 600 ~/.ssh/authorized_keys
cat $user.pub >> ~/.ssh/authorized_keys
echo "Copy the $user.pem to your computer."
在服务器或计算机上运行此脚本后,您可以使用以下命令从另一台服务器/计算机连接到它
ssh -i <pem_filename>.pem user@host
答案3
我在下面为 ec2 实例创建了一个脚本来创建基于密钥的 sudo 用户。请尝试这个。
注意:以下脚本适用于所有 Linux 操作系统,如 redhat、ubuntu、suse、kali、centos、fedora、amazon linux 1/2、debain......等
#!/bin/bash
#author: bablish jaiswal
#purpos: a sudo pem based user creation
clear
#echo "Hi, I am a function to create a sudo user with pem file. Kindly share following information"
echo -e "\n\n\n"
printf "\e[6;33mHi, I am a function to create sudo user with pem file. Kindly share following information\e[0m";echo
read -p "user name:- " name #input your name
read -p "complete path for $name home directory:- " home #user home directory
sudo useradd -m -d $home $name -s /bin/bash #create user by given input
sudo -u $name cat /dev/zero | sudo -u $name ssh-keygen -q -N "" #generating pem
sudo -u $name mv $home/.ssh/id_rsa.pub $home/.ssh/authorized_keys #permission
sudo chmod 700 $home/.ssh #permission again
sudo chmod 600 $home/.ssh/authorized_keys #permission again and again
echo " "
#echo "-------Copy below pem file text---------"
printf "\e[6;33m-----------------------------Copy below text-------------------------\e[0m";echo
sudo cat $home/.ssh/id_rsa
echo " "
#echo "-------Copy above text---------"
#svalue=$(cat /etc/sudoers |grep -i root |grep -i all|tail -n1 |awk '{$1=""}1')
svalue=$(cat /etc/sudoers |grep -i root |grep -i all|tail -n1 |awk '{print $2}') #sudo creation
echo "${name} ${svalue} NOPASSWD:ALL" >> /etc/sudoers && echo “Remark:- User $name is a sudo user” #sudo confirmation message
答案4
首先,使用以下命令在您的服务器上创建 RSA 密钥对ssh-keygen
:
ssh-keygen -b 4096
建议使用 4096 位的密钥长度在两台机器之间建立安全连接。
插入您的密码。如果不使用就将其留空即可。
将您的公钥添加到authorized_keys
cat .ssh/id_rsa.pub >> .ssh/authorized_keys
或者您可以使用服务器中的文本编辑器手动添加它。
将您的私钥复制到您的服务器中
cp .ssh/id_rsa /home/your_user/your_key.pem
现在在您的客户端 PC 中,从服务器下载密钥
scp [email protected]:/home/your_user/your_key.pem /home/your_user/Downloads/
现在测试你的 ssh 连接
ssh [email protected] -i '/home/your_user/Downloads/your_key.pem'