ฉันต้องการปิดใช้งานการตรวจสอบคีย์โฮสต์อย่างเข้มงวดssh
สำหรับ Ubuntu 11.04 ทำอย่างไร?
ssh -o UserKnownHostsFile=/dev/null
ฉันต้องการปิดใช้งานการตรวจสอบคีย์โฮสต์อย่างเข้มงวดssh
สำหรับ Ubuntu 11.04 ทำอย่างไร?
ssh -o UserKnownHostsFile=/dev/null
คำตอบ:
ใน~/.ssh/config
(หากไฟล์นี้ไม่มีอยู่ให้สร้างขึ้นใหม่):
Host *
StrictHostKeyChecking no
นี่จะเป็นการปิดสำหรับโฮสต์ทั้งหมดที่คุณเชื่อมต่อ คุณสามารถแทนที่*
ด้วยรูปแบบชื่อโฮสต์หากคุณต้องการใช้กับโฮสต์บางตัวเท่านั้น
ตรวจสอบให้แน่ใจว่าการอนุญาตในไฟล์ จำกัด การเข้าถึงตัวคุณเองเท่านั้น:
sudo chmod 400 ~/.ssh/config
config
ในไดเรกทอรีบ้านของฉัน
.ssh
ไดเรกทอรีย่อยของ homedir ของคุณเช่นกัน
ssh -o UserKnownHostsFile=/dev/null
แทนที่จะเพิ่มลงใน~/.ssh/config
ไฟล์ของคุณสำหรับโฮสต์ * ทั้งหมดมันจะปลอดภัยกว่าหากระบุโฮสต์เฉพาะ
คุณยังสามารถส่งพารามิเตอร์ในบรรทัดคำสั่งดังนี้:
ssh -o StrictHostKeyChecking=no yourHardenedHost.com
Warning: Permanently added 'frxxx.blaps.net,10.11.12.13' (RSA) to the list of known hosts.
ssh -o UserKnownHostsFile=/dev/null
แทน
เป็นมูลค่าชี้ให้เห็นว่าการตั้งค่าใน ssh config ของคุณ:
StrictHostKeyChecking no
จะหมายความว่ายังมีการเพิ่มโฮสต์คีย์ใน. ssh / known_hosts - คุณจะไม่ได้รับแจ้งว่าคุณเชื่อถือหรือไม่ แต่ควรเปลี่ยนโฮสต์ฉันยินดีที่จะเดิมพันว่าคุณจะได้รับคำเตือนครั้งใหญ่ คุณสามารถแก้ไขปัญหานี้ได้โดยเพิ่มพารามิเตอร์อื่น:
UserKnownHostsFile /dev/null
การดำเนินการนี้จะเพิ่มโฮสต์ "ค้นพบใหม่" เหล่านี้ทั้งหมดลงในถังขยะ หากคีย์โฮสต์เปลี่ยนไปจะไม่มีปัญหา
ฉันจะสะเพร่าไม่ต้องพูดถึงว่าการหลีกเลี่ยงคำเตือนเหล่านี้ใน hostkeys มีขอบเขตความปลอดภัยที่ชัดเจน - คุณควรระวังด้วยเหตุผลที่ถูกต้อง & สิ่งที่คุณกำลังเชื่อมต่อกับที่จริงคือสิ่งที่คุณหมายถึงการเชื่อมต่อและไม่ โฮสต์ที่เป็นอันตรายเนื่องจาก ณ จุดนี้คุณได้ลบส่วนสำคัญของการรักษาความปลอดภัยใน ssh เป็นวิธีแก้ปัญหา
ตัวอย่างเช่นหากคุณพยายามตั้งค่านี้ด้วย commandline คำสั่งทั้งหมดจะเป็น:
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host
แม้ว่าจะเป็นเรื่องโง่ - เนื่องจากตัวอย่างการทำงานด้านบนสำหรับไฟล์การกำหนดค่า ssh มีแนวโน้มที่จะสมเหตุสมผลมากกว่าในทุกกรณี
ssh -o StrictHostKeyChecking=no -o UserKnownHostFiles=/dev/null user@host
อาจจะสะดวกในการมีชื่อแทน ในกรณีของฉันฉันใช้issh
เพื่อเชื่อมต่อกับโฮสต์ที่ฉันรู้ว่าการเปลี่ยนแปลงคีย์โฮสต์
UserKnownHostsFile
UserKnownHostFiles
FYI ฉันชอบที่จะปิดการตรวจสอบโฮสต์เมื่อใช้ cssh
alias cssh='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
cssh
หรือssh
?
-o
ไม่จำเป็นครั้งที่สอง?
alias relay='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null 11086695@172.26.19.19 -p 2222'
ทำงานให้ฉัน
หากคุณต้องการปิดการใช้งานในการใช้งานครั้งเดียว:
ssh -o UserKnownHostsFile=/dev/null
สิ่งนี้จะทำงานได้หากรหัสโฮสต์เปลี่ยนและจะไม่บันทึกคีย์เป็นที่เชื่อถือได้เพื่อความปลอดภัยที่เพิ่มขึ้น
จากสิ่งที่มันเสียงเหมือน ,
NoHostAuthenticationForLocalhost yes
อาจจะดีพอสำหรับคุณ และคุณยังคงสามารถรักษาความปลอดภัยนั้นไว้ได้
https://askubuntu.com/a/87452/129227แนะนำให้แก้ไขไฟล์ปรับแต่งที่ช่วยได้ แต่แทนที่จะเปิดสิ่งขึ้นสำหรับโฮสต์ใด ๆ ฉันต้องการให้ทำต่อโฮสต์ สคริปต์ด้านล่างช่วยให้กระบวนการทำงานอัตโนมัติ:
ตัวอย่างการโทร
./sshcheck somedomain site1 ไซต์ 2 ไซต์ 3
สคริปต์ sshcheck
#!/bin/bash
# WF 2017-08-25
# check ssh access to bitplan servers
#ansi colors
#http://www.csc.uvic.ca/~sae/seng265/fall04/tips/s265s047-tips/bash-using-colors.html
blue='\033[0;34m'
red='\033[0;31m'
green='\033[0;32m' # '\e[1;32m' is too bright for white bg.
endColor='\033[0m'
#
# a colored message
# params:
# 1: l_color - the color of the message
# 2: l_msg - the message to display
#
color_msg() {
local l_color="$1"
local l_msg="$2"
echo -e "${l_color}$l_msg${endColor}"
}
#
# error
#
# show an error message and exit
#
# params:
# 1: l_msg - the message to display
error() {
local l_msg="$1"
# use ansi red for error
color_msg $red "Error: $l_msg" 1>&2
exit 1
}
#
# show the usage
#
usage() {
echo "usage: $0 domain sites"
exit 1
}
#
# check the given server
#
checkserver() {
local l_server="$1"
grep $l_server $sconfig > /dev/null
if [ $? -eq 1 ]
then
color_msg $blue "adding $l_server to $sconfig"
today=$(date "+%Y-%m-%d")
echo "# added $today by $0" >> $sconfig
echo "Host $l_server" >> $sconfig
echo " StrictHostKeyChecking no" >> $sconfig
echo " userKnownHostsFile=/dev/null" >> $sconfig
echo "" >> $sconfig
else
color_msg $green "$l_server found in $sconfig"
fi
ssh -q $l_server id > /dev/null
if [ $? -eq 0 ]
then
color_msg $green "$l_server accessible via ssh"
else
color_msg $red "ssh to $l_server failed"
color_msg $blue "shall I ssh-copy-id credentials to $l_server?"
read answer
case $answer in
y|yes) ssh-copy-id $l_server
esac
fi
}
#
# check all servers
#
checkservers() {
me=$(hostname -f)
for server in $(echo $* | sort)
do
os=`uname`
case $os in
# Mac OS X
Darwin*)
pingoption=" -t1";;
*) ;;
esac
pingresult=$(ping $pingoption -i0.2 -c1 $server)
echo $pingresult | grep 100 > /dev/null
if [ $? -eq 1 ]
then
checkserver $server
checkserver $server.$domain
else
color_msg $red "ping to $server failed"
fi
done
}
#
# check configuration
#
checkconfig() {
#https://askubuntu.com/questions/87449/how-to-disable-strict-host-key-checking-in-ssh
if [ -f $sconfig ]
then
color_msg $green "$sconfig exists"
ls -l $sconfig
fi
}
sconfig=~/.ssh/config
case $# in
0) usage ;;
1) usage ;;
*)
domain=$1
shift
color_msg $blue "checking ssh configuration for domain $domain sites $*"
checkconfig
checkservers $*
;;
esac