@ আরেকবার্ডাচের উত্তর সম্পর্কে আমার বিস্তৃত রুপটি এখানে। এটি নিম্নলিখিত এক্সটেনশনগুলি সরবরাহ করে:
- হোস্ট যে কোন জায়গায় হতে পারে
ssh
কম্যান্ড-লাইন; অর্থাত্ এটি ssh <args> <host> <commands>
সিনট্যাক্সকে সমর্থন করে
- পাথটি হার্ড-কোড করে না
ssh
- আরও শক্তিশালী বিশ্লেষণ
ssh_config
- বোনাস:
scp
খুব জন্য মোড়ক
ssh-wrapper
#!/bin/bash
password=$(awk '
BEGIN {
# Collect the SSH arguments as keys of a dictionary, so that we can easily
# check for inclusion.
for (i = 2; i < ARGC; i++) {
sshArgs[ARGV[i]] = 1
}
# Only process the first argument; all others are the command-line arguments
# given to ssh.
ARGC = 2
}
$1 == "Password" && inhost { print $2 }
/^\s*Host\s/ {
if ($2 in sshArgs)
inhost=1
else
inhost=0
}
' ~/.ssh/config "$@")
if [ "$password" ]; then
sshpass -p "$password" "$(which ssh)" "$@"
else
"$(which ssh)" "$@"
fi
scp-wrapper
#!/bin/bash
password=$(awk '
BEGIN {
# Collect the SCP arguments as keys of a dictionary, so that we can easily
# check for inclusion.
for (i = 2; i < ARGC; i++) {
colonIdx = index(ARGV[i], ":")
if (colonIdx > 0) {
scpArgs[substr(ARGV[i], 1, colonIdx - 1)] = 1
}
}
# Only process the first argument; all others are the command-line arguments
# given to scp.
ARGC = 2
}
$1 == "Password" && inhost { print $2 }
/^\s*Host\s/ {
if ($2 in scpArgs)
inhost=1
else
inhost=0
}
' ~/.ssh/config "$@")
if [ "$password" ]; then
sshpass -p "$password" "$(which scp)" "$@"
else
"$(which scp)" "$@"
fi
স্থাপন
আপনার এলিয়াসগুলি সংজ্ঞায়িত করুন ~/.bashrc
:
alias ssh=ssh-wrapper
alias scp=scp-wrapper
কনফিগারেশন
এই IgnoreUnknown
নির্দেশের সাথে, ssh
নতুনভাবে প্রবর্তিত Password
নির্দেশনা সম্পর্কে অভিযোগ করবেন না , সুতরাং (@ আরেকবার্ডাচের উত্তরের বিপরীতে), আমরা এটিকে একটি "বাস্তব" কনফিগারেশন হিসাবে উপস্থিত করতে পারি। আপনি যদি এটি পছন্দ না করেন তবে স্ক্রিপ্টটি মন্তব্য-আউট-এ ফিরিয়ে দেওয়া তুচ্ছ।
# Allow specifying passwords for Host entries, to be parsed by ssh-wrapper.
IgnoreUnknown Password
Host foohost
User baruser
Password foobarpassword