Sshfs ile komut satırında kullanıcı adı ve parola


15

Kullanarak küçük bir yedekleme komut dosyası oluşturuyorum sshfs:

sshfs backup_user@target_ip:/home /mnt/backup

Parolayı bu komuta eklemenin bir yolu var mı?

Veya FTP / SFTP dışında oturum açma şifresinin eklenebileceği başka bir dosya aktarım çözümü var mı?


4
RSA anahtar çifti oluşturmak için ssh-gkeygen komutunu kullanabilir, ardından RSA kimlik doğrulamasını kullanmak için ssh (istemci ve sunucu) yapılandırabilirsiniz. Bunu daha önce "düzenli" ssh kimlik doğrulaması için yaptınız mı?
airhuff

evet ama sonra sunucuları ssh üzerinden bağlanma şeklini değiştirmek zorunda .. bildiğim kadarıyla kimlik doğrulama anahtar tabanlı ya da giriş / şifre aynı anda değil her ikisi de olabilir ..
Zaza

2
İkisi de olabilir. Genellikle vardır. Bu şekilde, yeni oluşturulan bir kullanıcı, şifrelerini girerek sunucudaki anahtarlarını itebilir. Daha sonra anahtarlarını kullanırlar.
xhienne

Yanıtlar:


12

-o password_stdinfreeBSD gibi tüm sistemlerde çalışmıyor gibi görünüyor. vs

de kullanabilirsiniz expect Tercüman, sshfs ile çalışmalıdır ve hile yapmak gerekir.

Başka bir çözüm sshpass, örneğin / var / www dizinini yedeklediğinizi varsayalım

Yedekleme:

name=$(date '+%y-%m-%d')
mkdir /backup/$name && tar -czvf /backup/$name/"$name.tar.gz" /var/www

yedekleme dosyasını yedekleme sunucusuna yükleme

sshpass -p "your_password" scp -r backup_user@target_ip:/home/ /backup/$name

Bu yüzden bugünün yedeği ile dizin yükleyecek

Ama yine de, daha yüksek olarak söylendiği gibi, en iyi (güvenli ve basit) yol ssh anahtar çiftini kullanmak
olacaktır. eşleştirmeniz gerekir, ancak yedeklemek istediğiniz tüm sunucularda bir şifreyi düz metin biçiminde tutmaktan daha iyidir :),

Anahtar Çifti Doğru Şekilde Oluşturma

  • Yerel sunucuda

    ssh-keygen -t rsa
    
  • Uzak Sunucuda

    ssh root@remote_servers_ip "mkdir -p .ssh"
    
  • Oluşturulan Ortak Anahtarları Uzak Sunucuya Yükleme

    cat ~/.ssh/id_rsa.pub | ssh root@remote_servers_ip "cat >> ~/.ssh/authorized_keys"
    
  • Uzak sunucuda İzinleri Ayarlama

    ssh root@remote_servers_ip "chmod 700 ~/.ssh; chmod 640 ~/.ssh/authorized_keys"
    
  • Oturum aç

    ssh root@remote_servers_ip
    
  • SSH Protokolü v2'yi etkinleştirme

    / etc / ssh / sshd_config içinde "Protokol 2" uncomment

  • sshd'de ortak anahtar yetkilendirmesini etkinleştirme

    / etc / ssh / sshd_config içinde "PubkeyAuthentication yes" komutunu kaldırın

  • / Etc / ssh / sshd_config içinde StrictModes evet olarak ayarlanırsa,

    restorecon -Rv ~/.ssh
    

15

El kitabına göre -o password_stdin, standart girişten şifreyi okumaya izin verebilecek bir seçenek var , bu muhtemelen bir yönlendirme olabilir. Hiç kullanmadım, bu yüzden spekülasyon yapıyorum.

Bununla birlikte, doğal olarak güvensiz olan böyle bir çözüme karşı şiddetle tavsiye ediyorum.

sshözel / ortak anahtar sistemi ile çok iyi çalışır. Basit ve güvenlidir. Bir parola girmenize veya bir kabuk betiğine açık bir şekilde yazmanıza gerek yoktur. Genel anahtarınızı sunucuya basmanız yeterlidir ve hemen bağlanabilirsiniz.


Herkes bu çözümün çalışan bir örneğini sağlayabilir mi? Aşağıdakileri deniyorum, ama çalışmıyor:printf "my_password\n" | sshfs username@hostname:/remote_fs $HOME/local_dir
MikeyE

Bilginize, şifre korumalı SSH anahtarı kullandığımı söylemeliydim. Ben burada bulunan @ nathan-s-watson-haigh tarafından verilen cevap kullanarak çalışmasını başardı: unix.stackexchange.com/questions/128974/…
MikeyE 10:08

Elimde bir ssfs-mount'unu şifre korumalı SSH anahtarı ile test etmeme izin verecek uygun bir ortamım yok. Her neyse, emrinizde ilk başta beni etkileyen şey, herhangi bir -o password_stdinseçenek görmemem.
xhienne

Giriş için teşekkürler. Şu anda aşağıdaki komutu denedim ve bir şifre istemiyor, ancak geri dönmüyor. Yani, sadece komutun tamamlanmasını bekleyen orada oturur, hiçbir komut istemi görüntülenmez. Komutu denedim: printf "my_password\n" | sshfs -o password_stdin user@hostname:/ $HOME/local_dir PS Debian Buster sshfs -o password_stdin user@hostname:/ $HOME/local_dir
PPS'deyim

11

Boru 'sshfs password'ile <<<karşı -o password_stdinbash eserlerin:

sshfs -o password_stdin backup_user@target_ip:/home /mnt/backup <<< 'sshfs password'

4
Bu cevap kabul edilmelidir .. herhangi bir Linux işletim sistemi üzerinde çalışır.
argon

peki, systemd ile otomatik montaj için mnt-media.mount dosyasına nasıl koyulur?
João José

Bir süper küçük yorum: şifrenizde özel BASH karakterleri varsa (bir patlama (!)), O zaman şifre için çift tırnak yerine tek tırnak kullanmalısınız.
Kyle Challis

6
echo 'password' | sshfs user@host:/dir /mnt -o password_stdin

"-O password_stdin" seçeneği, parolanızı yönlendirmenizi sağlar.

Bununla birlikte, servis sağlayıcınız sftp için onları kullanmanıza izin vermiyorsa, anahtarlar daha iyi bir seçenektir. (Bu WP Engine'in önemli arızalarından biridir.)


Lütfen cevabınızı açıklığa kavuşturabilir misiniz? SE'de sadece bir satır kod iyi yanıt olarak sayılmaz
Romeo Ninov

@RomeoNinov Bu yazının soruyu yeterince iyi yanıtladığını söyleyebilirim. Herkes bariz olanın neden açık olduğunu açıklayan bir roman yazmaya meyilli değildir.
Satō Katsura

@SatoKatsura Teşekkürler. Yine de bu mücadeleye hazırım.
iateadonut

2

akılda tutulması gereken bir şey, -o password_stdinseçeneği kullanıyorsanız, çalışmıyor gibi görünebilir çünkü sshfs ana bilgisayara bağlanıp bağlanmayacağını soracaktır (eğer ilk kez bağlandığınızda ve eklenmezse) bilinen ana makine dosyasına henüz). Bir toplu işte çalıştırıyorsanız, sshf'lerin sorduğunu asla göremezsiniz. Bundan kaçınmak için geçici çözümler şunlardır:

  1. -o StrictHostKeyChecking=noseçeneği sshfs'ye ekle veya
  2. ana bilgisayarı bilinen ana makineler dosyasına eklemek için sshfs'yi bir kez manuel olarak çalıştırın

Bu bulmacanın son parçasıydı! Teşekkür ederim!
IronEagle

2

Dağı komut dosyası:

#!/bin/bash
server=<host>
user=<username>
pass=<password>
root=<hostpath>
mount=$(pwd)/sshfs

type sshfs >/dev/null 2>&1 || { echo >&2 "sshfs required"; exit 1; }
type sshpass >/dev/null 2>&1 || { echo >&2 "sshpass required"; exit 1; }

mkdir -p $mount

SSHPASS="$pass" sshfs $server:$root $mount -o ssh_command="sshpass -e ssh -l $user"

Unmount:

#!/bin/bash

mount=$(pwd)/sshfs

fusermount -u $mount

0

Sftp'yi sshfs ile bağlamak için otomatik komut dosyası

#!/bin/bash
expect <<END
spawn sshfs sftpuser@ip:/folder /mnt/folder -p 22 -o password_stdin
send "password\r"
expect eof
END
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.