本文目录导读:

我来为你提供几个不同场景下的SSH密钥自动配置脚本。
通用SSH密钥生成和配置脚本
#!/bin/bash
# SSH密钥自动配置脚本
# 使用方法: ./ssh_key_setup.sh [邮箱地址]
set -e
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 默认配置
KEY_TYPE="ed25519"
KEY_COMMENT="${1:-"$(whoami)@$(hostname)"}"
SSH_DIR="$HOME/.ssh"
KEY_PATH="$SSH_DIR/id_${KEY_TYPE}"
# 检查是否已有SSH密钥
check_existing_key() {
if [ -f "$KEY_PATH" ]; then
echo -e "${YELLOW}警告: SSH密钥已存在: $KEY_PATH${NC}"
read -p "是否覆盖?(y/n): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo -e "${GREEN}使用现有密钥${NC}"
return 1
fi
fi
return 0
}
# 创建SSH目录
create_ssh_dir() {
if [ ! -d "$SSH_DIR" ]; then
mkdir -p "$SSH_DIR"
chmod 700 "$SSH_DIR"
echo -e "${GREEN}创建SSH目录: $SSH_DIR${NC}"
fi
}
# 生成SSH密钥
generate_key() {
echo -e "${GREEN}生成SSH密钥...${NC}"
ssh-keygen -t "$KEY_TYPE" -C "$KEY_COMMENT" -f "$KEY_PATH" -N ""
if [ $? -eq 0 ]; then
echo -e "${GREEN}SSH密钥生成成功${NC}"
echo -e "公钥: ${KEY_PATH}.pub"
echo -e "私钥: ${KEY_PATH}"
else
echo -e "${RED}SSH密钥生成失败${NC}"
exit 1
fi
}
# 配置SSH配置文件
configure_ssh_config() {
local config_file="$SSH_DIR/config"
# 创建基础SSH配置
if [ ! -f "$config_file" ]; then
cat > "$config_file" << EOF
# SSH 配置文件
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_${KEY_TYPE}
ServerAliveInterval 60
ServerAliveCountMax 3
StrictHostKeyChecking accept-new
EOF
chmod 600 "$config_file"
echo -e "${GREEN}SSH配置文件创建成功${NC}"
else
echo -e "${YELLOW}SSH配置文件已存在${NC}"
fi
}
# 显示公钥
show_public_key() {
echo -e "\n${GREEN}=== 公钥内容 ===${NC}"
cat "${KEY_PATH}.pub"
echo -e "\n${YELLOW}请将此公钥添加到远程服务的SSH密钥中:${NC}"
echo " - GitHub: Settings -> SSH and GPG keys"
echo " - GitLab: Settings -> SSH Keys"
echo " - 服务器: ~/.ssh/authorized_keys"
}
# 主函数
main() {
echo -e "${GREEN}开始配置SSH密钥...${NC}\n"
create_ssh_dir
if check_existing_key; then
generate_key
fi
configure_ssh_config
show_public_key
echo -e "\n${GREEN}SSH密钥配置完成!${NC}"
# 可选: 测试SSH连接
read -p "是否测试SSH连接?(y/n): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
read -p "请输入测试主机 (默认: github.com): " test_host
test_host=${test_host:-github.com}
echo -e "\n${YELLOW}测试连接到 $test_host ...${NC}"
ssh -T "git@$test_host" 2>/dev/null || true
fi
}
# 运行主函数
main
适用于多服务器的批量配置脚本
#!/bin/bash
# 批量SSH密钥部署脚本
# 使用方法: ./batch_ssh_deploy.sh server_list.txt
SERVER_LIST="${1:-servers.txt}"
SSH_KEY="${HOME}/.ssh/id_ed25519.pub"
# 服务器列表格式 (每行): username@hostname:port
check_requirements() {
if [ ! -f "$SSH_KEY" ]; then
echo "错误: SSH公钥不存在: $SSH_KEY"
echo "请先生成SSH密钥"
exit 1
fi
if [ ! -f "$SERVER_LIST" ]; then
echo "错误: 服务器列表文件不存在: $SERVER_LIST"
exit 1
fi
}
# 部署公钥到单个服务器
deploy_to_server() {
local server="$1"
local username=$(echo "$server" | cut -d'@' -f1)
local host=$(echo "$server" | cut -d'@' -f2 | cut -d':' -f1)
local port=$(echo "$server" | cut -d':' -f2)
port=${port:-22}
echo "部署到 $username@$host:$port ..."
# 使用ssh-copy-id部署公钥
ssh-copy-id -p "$port" -i "$SSH_KEY" "$username@$host" 2>/dev/null
if [ $? -eq 0 ]; then
echo "✓ 成功部署到 $host"
else
echo "✗ 部署失败: $host"
fi
}
# 批量部署
batch_deploy() {
while IFS= read -r server; do
# 跳过注释和空行
[[ "$server" =~ ^#.*$ ]] && continue
[[ -z "$server" ]] && continue
deploy_to_server "$server"
done < "$SERVER_LIST"
}
echo "开始批量部署SSH密钥..."
check_requirements
batch_deploy
echo "批量部署完成!"
自动化测试和验证脚本
#!/bin/bash
# SSH密钥测试和验证脚本
# 检查SSH密钥配置是否正确
echo "=== SSH配置检查 ==="
# 检查SSH目录
echo -n "检查SSH目录: "
if [ -d "$HOME/.ssh" ]; then
echo "✓ 存在"
ls -la "$HOME/.ssh/" | grep -E "^-.*(pub|id_)"
else
echo "✗ 不存在"
fi
# 检查密钥文件
echo -n "检查SSH密钥: "
if [ -f "$HOME/.ssh/id_ed25519" ]; then
echo "✓ 存在 (ed25519)"
elif [ -f "$HOME/.ssh/id_rsa" ]; then
echo "✓ 存在 (RSA)"
else
echo "✗ 不存在"
fi
# 检查公钥
echo -n "检查公钥: "
if [ -f "$HOME/.ssh/id_ed25519.pub" ]; then
echo "✓ 存在"
echo -n "密钥指纹: "
ssh-keygen -lf "$HOME/.ssh/id_ed25519.pub"
elif [ -f "$HOME/.ssh/id_rsa.pub" ]; then
echo "✓ 存在"
echo -n "密钥指纹: "
ssh-keygen -lf "$HOME/.ssh/id_rsa.pub"
else
echo "✗ 不存在"
fi
# 检查权限
echo -n "SSH目录权限: "
if [ "$(stat -c "%a" "$HOME/.ssh")" = "700" ]; then
echo "✓ 正确 (700)"
else
echo "✗ 不正确"
fi
# 检查SSH代理
echo -n "SSH代理运行状态: "
if ssh-add -l &>/dev/null; then
echo "✓ 运行中"
ssh-add -l
else
echo "✗ 未运行或未添加密钥"
fi
# 测试连接
echo -n "测试GitHub连接: "
ssh -T git@github.com 2>&1 | grep -q "successfully"
if [ $? -eq 0 ]; then
echo "✓ 成功"
else
echo "✗ 需要配置"
fi
echo "=== 检查完成 ==="
Windows PowerShell脚本
# Windows SSH密钥配置脚本
# save as: setup-ssh.ps1
# 颜色函数
function Write-Color {
param([string]$Message, [string]$Color)
Write-Host $Message -ForegroundColor $Color
}
# 主函数
function Setup-SSH {
$sshDir = "$env:USERPROFILE\.ssh"
$keyPath = "$sshDir\id_ed25519"
# 创建SSH目录
if (-not (Test-Path $sshDir)) {
New-Item -ItemType Directory -Path $sshDir -Force | Out-Null
Write-Color "创建SSH目录" Green
}
# 检查现有密钥
if (Test-Path "$keyPath") {
Write-Color "SSH密钥已存在" Yellow
$overwrite = Read-Host "是否覆盖? (y/n)"
if ($overwrite -ne "y") {
Write-Color "使用现有密钥" Green
return
}
}
# 生成SSH密钥
Write-Color "生成SSH密钥..." Green
ssh-keygen -t ed25519 -C "$env:USERNAME@$env:COMPUTERNAME" -f $keyPath -N '""'
if ($LASTEXITCODE -eq 0) {
Write-Color "SSH密钥生成成功" Green
# 启动SSH代理
Start-Service ssh-agent -ErrorAction SilentlyContinue
# 添加密钥到代理
ssh-add $keyPath
# 显示公钥
Write-Color "`n公钥内容:" Yellow
Get-Content "$keyPath.pub"
Write-Color "`n请将上述公钥添加到: " Yellow
Write-Color " - GitHub: Settings -> SSH and GPG keys"
Write-Color " - GitLab: Settings -> SSH Keys"
}
}
# 运行设置
Setup-SSH
使用方法
-
Linux/Mac:
# 保存脚本为 setup_ssh.sh chmod +x setup_ssh.sh ./setup_ssh.sh user@example.com
-
Windows:
# 在PowerShell中运行 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser .\setup-ssh.ps1
这些脚本会自动创建SSH密钥、配置权限、设置SSH配置文件,并显示公钥供你添加到远程服务中。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播