SSH改为密钥登录的一键脚本

每次新建了一个VPS,或者重装了Debian系统,要把ssh密码登录改成密钥登录都要输好多条命令,略显繁琐,所以写了一个小脚本,可以一键执行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #!/bin/bash # Backup existing SSH configuration sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak # Generate a random port number for SSH port=$(shuf -i 20000-60000 -n 1) # Generate SSH key if it does not exist if [ ! -f ~/.ssh/id_rsa ]; then echo "Generating SSH key..." ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -q -N "" fi # Add SSH key to authorized keys cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys chmod 700 ~/.ssh # Update SSH configuration sudo sed -i 's/^#\?\(PubkeyAuthentication\s*\).*$/\1yes/' /etc/ssh/sshd_config sudo sed -i 's/^#\?\(PasswordAuthentication\s*\).*$/\1no/' /etc/ssh/sshd_config sudo sed -i 's/^#\?\(ChallengeResponseAuthentication\s*\).*$/\1no/' /etc/ssh/sshd_config sudo sed -i "s/^#\?\\(Port\\s*\\).*$/\\1$port/" /etc/ssh/sshd_config # Restart SSH service sudo systemctl restart sshd # Check if SSH service is running if systemctl is-active --quiet sshd; then echo -e "SSH port has been changed to $port.\nCheck the firewall to make sure port $port is open.\nKey-based authentication has been enabled while password authentication has been disabled.\nDon't forget to save the private key file." else # SSH service failed to start, restore original configuration and display error message echo "Error: SSH service failed to start. Reverting to original configuration..." sudo cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config sudo systemctl restart sshd echo "SSH service has been restored to the original configuration." exit 1 fi # Remove backup of SSH configuration(Optional) # sudo rm /etc/ssh/sshd_config.bak 主要功能:自动生成密钥对,更改ssh端口为随机端口,禁用密码登录,并开启密钥登陆。 ...

April 4, 2023 · 2 min · stayyoung

一个基于Cloudflare API的DDNS脚本

现在可以使用的DDNS工具和软件有很多,但有时候我们只需要一个简单的shell脚本就能完成任务。 1、在Cloudflare上建立一个二级域名 首先,前往Cloudflare上,建立用来作为DDNS用的A记录和AAAA记录。假设是: A记录: ddns.example.com 1.1.1.1 AAAA记录: ddns.example.com 2606:4700:4700::1111 IP地址先可以随便填。 2、取得所需的ZONE_ID、API_Token和RECORD_ID ZONE_ID就在域名概述页的右下侧,名字为区域ID。 接着,在同一页的下方点击获取API 令牌。 点击创建令牌,使用“编辑区域DNS”的模板,选择相应的域名,点击显示摘要,并创建令牌。 把生成的API_Token保存好。 接着打开一个Linux终端,执行以下代码: 1 2 3 4 5 ZONE_ID="你的 Zone ID" API_TOKEN="你的API Token" curl -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=ddns.example.com" \ -H "Authorization: Bearer $API_TOKEN" \ -H "Content-Type: application/json" 注意替换代码中的ZONE_ID,API_Token,二级域名。 在返回的结果中,找到“name”与相应二级域名相符的RECORD_ID。 3、建立Shell脚本 在你喜欢的位置比如root目录建立一个脚本文件: 1 mkdir cfddns && cd cfddns 1 touch ddns.sh 然后用编辑器打开: 1 vim ddns.sh 复制以下代码,并保存退出: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 #!/bin/sh # 简单的使用Clodflare API来实现DDNS的脚本 NEW_IPv4=$(curl -s http://ipv4.icanhazip.com) NEW_IPv6=$(curl -s http://ipv6.icanhazip.com) CURRENT_IPv4=$(cat $(dirname "$0")/current_ipv4.txt) CURRENT_IPv6=$(cat $(dirname "$0")/current_ipv6.txt) CURRENT_TIME=$(date +"%F %T") # 填入DDNS域名 DDNS="ddns.example.com" # ZONE_ID在Clouflare域名页面上获取 ZONE_ID="1234567890abcdef1234567890abcdef" # API_TOKEN在Clouflare个人资料页面上创建 API_TOKEN="1234567890abcdef1234567890abcdef" # RECORD_ID获取应执行以下代码: # ZONE_ID="你的 Zone ID" # API_TOKEN="你的API Token" # curl -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=example.com" \ # -H "Authorization: Bearer $API_TOKEN" \ # -H "Content-Type: application/json" RECORD_ID="1234567890abcdef1234567890abcdef" if [ -z "$NEW_IPv4" ] && [ -z "$NEW_IPv6" ]; then echo "[$CURRENT_TIME] Failed to get IP address" >> $(dirname "$0")/crontab_log.txt exit 1 elif [ "$NEW_IPv4" = "$CURRENT_IPv4" ] && [ "$NEW_IPv6" = "$CURRENT_IPv6" ]; then echo "[$CURRENT_TIME] No change in IP address" >> $(dirname "$0")/crontab_log.txt else if [ -n "$NEW_IPv4" ] && [ "$NEW_IPv4" != "$CURRENT_IPv4" ]; then curl -k -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \ -H "Authorization: Bearer $API_TOKEN" \ -H "Content-Type: application/json" \ --data '{"type":"A","name":"'$DDNS'","content":"'$NEW_IPv4'","ttl":1,"proxied":false}' > /dev/null echo "$NEW_IPv4" > $(dirname "$0")/current_ipv4.txt echo "[$CURRENT_TIME] IPv4 address changed to $NEW_IPv4" >> $(dirname "$0")/crontab_log.txt fi if [ -n "$NEW_IPv6" ] && [ "$NEW_IPv6" != "$CURRENT_IPv6" ]; then curl -k -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \ -H "Authorization: Bearer $API_TOKEN" \ -H "Content-Type: application/json" \ --data '{"type":"AAAA","name":"'$DDNS'","content":"'$NEW_IPv6'","ttl":1,"proxied":false}' > /dev/null echo "$NEW_IPv6" > $(dirname "$0")/current_ipv6.txt echo "[$CURRENT_TIME] IPv6 address changed to $NEW_IPv6" >> $(dirname "$0")/crontab_log.txt fi fi 下方是一个更简单的仅有IPV4 DDNS的脚本,有需要的自取。 ...

March 31, 2023 · 2 min · stayyoung