Skip to content

Instantly share code, notes, and snippets.

@cemtopkaya
Last active October 21, 2020 12:24
Show Gist options
  • Save cemtopkaya/b07529142dcd3aa0c990991a156a6baf to your computer and use it in GitHub Desktop.
Save cemtopkaya/b07529142dcd3aa0c990991a156a6baf to your computer and use it in GitHub Desktop.
###################################################################################
# Argumanlar üstünden değişkenler ayarlaniyor
# ./ssh_config.sh "$SSH_USER_ID" "$HOST" "$HOME"
# ./ssh_config.sh cemtopkaya 192.168.13.239 /root
###################################################################################
declare -r DEFAULT_SSH_USER_ID="ctopkaya"
declare -r SSH_USER_ID=${1:-$DEFAULT_SSH_USER_ID}
declare -r DEFAULT_HOST="192.168.13.239"
declare -r HOST=${2:-$DEFAULT_HOST}
declare -r REMOTE="${SSH_USER_ID}@${HOST}"
declare -r DEFAULT_HOME="/root"
declare -r HOME=${3:-$DEFAULT_HOME}
###################################################################################
# SSH Ayarlari Yapiliyor
###################################################################################
# SSH İçin Değişkenler Ayarlaniyor
declare -r SSH_DIR="${HOME}/.ssh"
declare -r SSH_CONFIG="${HOME}/.ssh/config"
declare -r SSH_KEY_PUBLIC="${SSH_DIR}/deb_pkg_ssh.pub"
declare -r SSH_KEY_PRIVATE="${SSH_DIR}/deb_pkg_ssh"
if [ ! -d "$SSH_DIR" ];
then
# .ssh Dizini 700 izin seviyesiyle yaratilsin
mkdir -m700 /root/.ssh
fi
if [ ! -f "$SSH_CONFIG" ] || ! grep -q $HOST "$SSH_CONFIG" ; then
# config Dosyasi yaratilsin (otomatik ssh baglantisi icin)
su - << EOF
echo "
Host ${HOST}
Hostname ${HOST}
StrictHostKeyChecking no
IdentityFile ${SSH_KEY_PRIVATE}
" >> "$SSH_CONFIG"
EOF
chmod 644 "$SSH_CONFIG"
fi
# SSH icin public anahtar olusturulsun
if [[ ! -f "$SSH_KEY_PUBLIC" ]]; then
su - << EOF
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxQEFpKbU5rYpwSlPtLawS/krp+9QXEOitezW2s4bKYmDNe3V4pV8tV8o4rVt8owch/Hk7oSHLuvr1PZ/Llqes8KI8Ru+SFCKTZx7RHL3EUrSuw9xuBD8NRbANwqik10rqec44uxSV0RL3vOLe4tO78y9pthMaZX7PThZ1M3N6sP+H/AR3txJBhQ42md+nMycQJsWgZfWdsrIZV42H2VVAzCiLOdAI3NRsycOpsNRHGFJsPZBvqtwzQDMRyfruKMa8TiaV4VfyLV2zJtzromiUKmG5vF+GlbvuqoSvumEmgDwzfPJrHM56fM29f5U4j9jEjlVi1lUImNvPgteq+zXZ vagrant@ubuntu-xenial" >> "$SSH_KEY_PUBLIC"
EOF
chmod 644 "$SSH_KEY_PUBLIC"
fi
# SSH icin private anahtar olusturulsun
if [[ ! -f "$SSH_KEY_PRIVATE" ]]; then
su - << EOF
echo "-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAsUBBaSm1Oa2KcEpT7S2sEv5K6fvUFxDorXs1trOGymJgzXt1
eKVfLVfKOK1bfKMHIfx5O6Ehy7r69T2fy5anrPCiPEbvkhQik2ce0Ry9xFK0rsPc
bgQ/DUWwDcKopNdK6nnOOLsUldES97zi3uLTu/MvabYTGmV+z04WdTNzerD/h/wE
d7cSQYUONpnfpzMnECbFoGX1nbKyGVeNh9lVQMwoiznQCNzUbMnDqbDURxhSbD2Q
b6rcM0AzEcn67ijGvE4mleFX8i1dsybc66JolCphubxfhpW77qqEr7phJoA8M3zy
axzOenzNvX+VOI/YxI5VYtZVCJjbz4LXqvs12QIDAQABAoIBAQCHI0Q7l27yEJuR
zTl7hOzCdlpLVpJ3G48qZNuo9er4dlTzlQMU/pA4E8y7tYAg4HLZuJH9onYPy/j1
7QvdvnkMY1Jtvm984hkSZPab29vayGu1KuLuhhJEXjNB6n2FYBdf+Yn+urORHZvm
gX4/DJT9oQUvBYA/Cc7K4vBAXv/WM8LOqvOjAVkHTCWyz9O2bqVz7hvzf/rp706h
3IIYfbjQWX1ot9vJvAsaFqEEJokK0fzuoWTAUbITi9Lf+VNetsPADv0GDYHzu7a/
SUte5mo9OX36OUbYoRJxooLg5HEOSJGtTAxsu9lGEg9rvvLDfIOpzjppbUp9W53t
K4oBGeUBAoGBAOKZI3w4aDc3AV93G/zLUzh8FVB1Q3V+SM5CsD+z0tGznqeeDzAX
eWHsB+EJU/x9q+b+5SyG78aEq3YNNEykAXMxZoLT7MzdFznWfCL7SgIWAVUrPZDw
ISvuHwdRtRrdjK/Qz+LvMIl3/Aal/RjZB7kMbAQOjZ7TTA9UhBa3injxAoGBAMg/
9kmwlU2pDKiyiCFlEc31l0DB25bfFQBPD0+bJ9xu7Vk9JdjbTp8D3mL8dvdxaDL7
0UREl7Mr5uV5Vm39X1V5nUrZgAPGaXdJpKgg7WKsK60mCATGL6VqJ835FMnp7uLe
3EUKfNLRZymzC+ph5GmWiOjCvNSwiivoC81l0UtpAoGAB9hfdySIzyiTXpfEG0t6
1SDOqBt3O3Ek2idK7Nmv+dyrKIh7ZCHb7Pz8BNmK09oSAoxeqNz/HjNnsE2iuuiO
uEtEjlECCNG6xSDc6WUj2dCjOSynFAaMT3YOEvXMPGLhRREIsYWwe4Hw8tX6Xkrd
TpXUg4txccdFAd7eN98g5zECgYEAkY2MYzurCmvZ+7TpJfzk2COu8S73gc5c4YCV
zHMmoh8u/jJoFBw0JXkWaDTB9FHGP2iyT0DcUyuSBTIRFJmadfKT1hgJ6LSLbF1n
BZ4JbjNe+9gs8+tqLn3euORXq/wR223KBZT97e6vYav2+UJ2WBlHIoiJ4L8Bb7CX
A5ECdCECgYEAo/XA8PK1LwmTBxhzW9n4l5u0k39NH5BT4A94Obg9bxs47YPw/P9Q
CKNf4znMVOxOAvAwWeLZfLdSvgqM3TvKFyOb8d3wNaVh5fxYQOe70E0wN75CUEub
ZALIINjuHDHUVyusbzP3xJK4iqG20K5DkRGaLnrFUMbr4PaUArtdqoI=
-----END RSA PRIVATE KEY-----" >> "$SSH_KEY_PRIVATE"
EOF
chmod 600 "$SSH_KEY_PRIVATE"
fi
# Uzak sunucuya gizli anahtarimizi uzak sunucuya kayit ettirelim
ssh-copy-id -i "$SSH_KEY_PRIVATE" "$REMOTE"
#!/bin/bash
###################################################################################
# Uzak sunucuda bir dizini listelemek için
# ssh kullanıcıAdı@uzakMakinaIP ls /dizin/yolu
#
# Listelenen dosyaları dosya adına göre büyükten küçüğe sıralamak için
# ls -lr > isimlerine göre liste halinde (-l) ve reverse yani tersten (-r)
#
# Dönen sonuçların içinde süzerek ilk satırı almak için
# grep -i -o /opt/cinar/packages/%s.*$ -m1
# > -i : case insensetive (büyük küçük harf duyarsız)
# > -o : only-matching (eşleşen kısım sadece)
# > -m : veya --max-count=NUM ile eşleşen ilk satırdan sonra dursun (-m=1)
#
# Uzak bağlantıyla (SFTP) dosya çekilebilmesi FTP uygulamalarıyla mümkünken,
# SSH ile dosyayı çekmek için SCP komutunu kullanacağız.
# scp kullanici@uzak_ip:/dosya/yolu/dosya_adi /kaydedilecek/dizin/yolu
#
# İndireceğimiz dosya kurulsun istiyorsak
# apt-get install /indirilen/paketin/dosya/yolu/paketin_adi.deb
#
# ------------ Şifresiz Bağlantı İçin Yapılacaklar ------------------------------
# Önce "gizli cümle" (passphrase) olmaksızın gizli ve açık anahtarlarını oluşturalım
# $ cd ~/.ssh
# $ ssh-keygen -b 2048 -t rsa -f 13_137 -q -N ""
#
# Açık anahtarı ssh bağlantısını yapmak istediğimiz uzak bilgisayarda authorized_keys dosyasına ekleyelim
# $ cat 13_137.pub | ssh ctopkaya@192.168.13.137 "chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
#
# ~/.ssh/config Dosyası oluşturup içinde ilgili adrese giderken hangi kimlik dosyasını kullanacağını belirtebiliriz
#
# vagrant@ubuntu-xenial:~/.ssh$ cat config
# Host 192.168.13.137
# Hostname 192.168.13.137
# IdentityFile ~/.ssh/13_137
#
# bağlantıyı deneyebiliriz
# $ ssh ctopkaya@192.168.13.137
#
###################################################################################
declare -r libcnrhttp2="libcnrhttp2_"
declare -r root="/opt/cinar/packages"
declare -r destination="/opt/cinar/packages"
declare -r id=ctopkaya
declare -r host=192.168.13.137
declare -r remote=$id"@"$host
declare -r prefixes=("libcnrhttp2_" "libcnr5gmessages_" "libcnrcommon_" "cnrausf_" "cnrudm_" "cnrudr_")
declare cmd=""
#printf -v cmd "ssh %s ls %s/%s* -lr | awk 'NR==1'" "$remote" "/opt/cinar/packages" "libcnrhttp2_"
#printf -v cmd "ssh %s ls %s/%s* -lr | grep -i -o /opt/cinar/packages/%s.*$ -m1" $remote /opt/cinar/packages libcnrhttp2_ libcnrhttp2_
declare filePath=""
for prefix in ${prefixes[@]}
do
printf -v cmd 'ssh %s ls %s/%s* -lr | grep -i -o /opt/cinar/packages/%s.*$ -m1' "$remote" "/opt/cinar/packages" "$prefix" "$prefix"
echo "$cmd\n"
#eval $cmd
filePath=$($cmd)
echo -e "\n------ $filePath --------"
echo "...Downloading..."
sudo scp ctopkaya@192.168.13.137:$filePath $destination
# Eğer kimlik doğrulama işini bir gizli & açık anahtar ile ayarlamışsanız -i anahtarıyla gizli anahtarı verebilir
# böylece hiç şifre girmeye gerek kalmadan dosyaları indirebiliriz
# Burada anahtarı 13_137 adıyla oluşturursak, 13_137.pub dosyası açık anahtarımız olacak
# sudo scp -i ~/.ssh/13_137 ctopkaya@192.168.13.137:$filePath $destination
echo -e "\n....Installing..."
sudo apt-get install $filePath
done
#!/bin/bash
###################################################################################
# Uzak sunucuda bir dizini listelemek için
# ssh kullanıcıAdı@uzakMakinaIP ls /dizin/yolu
#
# Listelenen dosyaları dosya adına göre büyükten küçüğe sıralamak için
# ls -lr > isimlerine göre liste halinde (-l) ve reverse yani tersten (-r)
#
# Dönen sonuçların içinde süzerek ilk satırı almak için
# grep -i -o /opt/cinar/packages/%s.*$ -m1
# > -i : case insensetive (büyük küçük harf duyarsız)
# > -o : only-matching (eşleşen kısım sadece)
# > -m : veya --max-count=NUM ile eşleşen ilk satırdan sonra dursun (-m=1)
#
# Uzak bağlantıyla (SFTP) dosya çekilebilmesi FTP uygulamalarıyla mümkünken,
# SSH ile dosyayı çekmek için SCP komutunu kullanacağız.
# scp kullanici@uzak_ip:/dosya/yolu/dosya_adi /kaydedilecek/dizin/yolu
#
# İndireceğimiz dosya kurulsun istiyorsak
# apt-get install /indirilen/paketin/dosya/yolu/paketin_adi.deb
###################################################################################
declare -r libcnrhttp2="libcnrhttp2_"
declare -r root="/opt/cinar/packages"
declare -r destination="/opt/cinar/packages"
declare -r id=ctopkaya
declare -r host=192.168.13.239
declare -r remote=$id"@"$host
declare -r prefixes=("libCinarNnefPFDmanagement", "cnrnef" "cnrnssf" "cnrnrf")
declare -r keyFile=~/.ssh/dpkg11
declare cmd
declare filePath
# Eğer dosyaları indireceğimiz dizin yoksa oluşturacağız
if [ ! -d "$destination" ]; then
sudo mkdir -m 775 -p $destination
fi
if [ ! -f "$keyFile" ]; then
echo "Uzak bağlantıyı anahtar ikilisi üzerinden yapacak $keyFile dosyası yok!"
# Önce parola olmaksızın gizli/açık anahtar yaratılacak
sudo ssh-keygen -b 2048 -t rsa -f $keyFile -q -N ""
# Uzak sunucunun authorizedkeys dosyasına açık anahtar eklenecek
sudo ssh-copy-id -i $keyFile "$id@$host"
fi
# Anahtarları ihtiyaç olduğunda kullanıma sunacak ssh-agent çalıştırılır
eval $(ssh-agent)
# Gizli anahtarı agentın listesine ekleyeceğiz
sudo ssh-add $keyFile
# Yüklenmesi istenilen dosyaları uzak sunucunun
# paketler dizininde arayıp son sürümlerini yükleyeceğiz
for prefix in ${prefixes[@]}
do
printf -v cmd 'ssh -i %s %s ls %s/%s* -lr | grep -i -o /opt/cinar/packages/%s.*$ -m1' "$keyFile" "$remote" "/opt/cinar/packages" "$prefix" "$prefix"
echo "$cmd\n"
#eval $cmd
filePath=$($cmd)
echo -e "\n------ $filePath --------"
echo "\n...Downloading..."
sudo scp -i $keyFile $id@$host:$filePath $destination
echo -e "\n....Installing..."
sudo apt-get install $filePath
done
@cemtopkaya
Copy link
Author

cemtopkaya commented Aug 5, 2020

bash-script-list-get-install Dosyasında ssh isteklerinde config dosyasında bağlantı kurulacak uzak sunucunun adresine dair bir kayıt varsa gizli/açık anahtar ikilisi config dosyasında belirtilen yerden Identityfile özelliğinden çekilir.

Ancak istersek dosyanın yolunu ssh komutlarına -i anahtarıyla da verebiliriz. Bunun için bash-script-with-identityfile-list-get-install dosyasına bakabilirsiniz.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment