it-swarm-tr.com

SSH üzerinden fark nasıl?

Kullanılabilir tek bağlantının ssh olması koşuluyla dosyaları/klasörleri makineler arasında nasıl dağıtırım?

180
Alexey Timanovsky

Sonunda harika bir çözüm buldum: vimdiff

vimdiff /path/to/file scp://remotehost//path/to/file

teşekkürler http://linux.spiney.org/remote_diff_with_vim_and_ssh ayrıca bakınız http://www.vim.org/scripts/script.php?script_id=1075 .

108

Bunu Bash'in işlem ikamesi ile yapabilirsiniz:

 diff foo <(ssh myServer 'cat foo')

Veya her ikisi de uzak sunuculardaysa:

diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')
153
Kyle Brandt

Gerçek dosyaların farkından ziyade hangi dosyaların farklı olduğunu görmek istiyorsanız, rsync --dry-run

62
Rory

İşte başka bir hızlı ve kirli komut satırı tarifi. Seçilen cevabın aksine, makefiles içinde çalışır:

ssh [login]@[Host] "cat [remote file]" | diff - "[local file]"
16
Steve Dickinson

Dosyaları ortak bir makineye getirmek ve orada fark etmek için scp kullanın?

Ya da dosyalarının farklı olup olmadığını bilmek istiyorsanız, her makinede md5sum ile bunları karma yapın.

Ayrıca SSHFS gibi bir şeye bakabilirsiniz, ancak diff gibi bir algoritmanın bu konuda ne kadar iyi performans gösterdiğini bilmiyorum.

10
Ian Clelland

Bunun bir yolu, eğer sisteminizde mümkünse uzak dosya sistemini sshfs ile bağlamak olacaktır.

7
Zoredache

Kuru çalışma modunda rsync, başka bir cevap içinde kısaca önerildiği gibi kullanabilirsiniz. Farklı dosyaları listeler.

Bunun için rvnc seçeneklerini kullanın (r = özyinelemeli, v = ayrıntılı, n = kuru çalışma, c = sağlama toplamı ). Çekme modunda rsync ile (rsync [OPTION...] [[email protected]]Host:SRC... [DEST]), bir örnek:

rsync -rvnc [email protected]:/var/www/html/dev/ .

Unutmayın , bu yerel veya uzak dosyanın daha yeni olup olmadığı hakkında bilgi vermez. Sadece farklıysalar.

3
zzapper

Sshf'niz varsa ve dizinleri farklılaştırmanız gerekiyorsa:

mkdir remote_path
sshfs [email protected]:/path/ remote_path
diff -r path remote_path
2
metrix
  • yerel makinenizde, farklılaştırmak istediğiniz dizinin yinelemeli bir kopyasını oluşturun. Örneğin:

    cp -R dir replica
    
  • uzak dizini yerel kopya üzerinden çoğaltmak için rsync kullanın:

     rsync remote:/path/to/dir replica
    
  • yerel dizin ile uzak dizinin yerel kopyası arasındaki farkı bulmak için diff komutunu kullanın:

    diff dir replica
    
2
salva

Muhtemelen ~/.bashrc dosyanızda bir bash işlevi oluşturarak yaklaşımı genelleştirmeyi de deneyebilirsiniz:

myrdiff() { ssh [email protected]"$1" cat "$2" | diff -s - "$2" ; }

daha sonra şöyle bir yapı ile çağırmak:

myrdiff vm20-x86-64 /etc/gdm/Init/Default

Diff ile -s çağrıldığında, dosyaların aynı olup olmadığını da bildirir.

Şerefe! Jim

1
Jim Swain

http://myfedora.co.za/2012/04/diff-two-remote-file-systems/

fark <(/ usr/bin/ssh [email protected] 'ls/opt/lib /') <(/ usr/bin/ssh [email protected] 'ls/tmp /') | grep -i ">" | sed 's /> // g'

1
Riaan

İşte böyle yaptım.

Uzak sunucuya SFTP kullandım ve istendiğinde kullanıcı adımı/parolamı girdim. Sonra diff komut ev dizininde .gvfs dir oluşturulan dizin kullandım.

diff -r --brief/home/kullanıcı dizini/.gvfs/SFTP\on\freenas.local/dizin yolu/dizin1/yerel dizin yolu/dizin2

1
Peter

Bu, yerel klasörü ve uzak klasörü farklılaştırmaya yardımcı olabilecek bir komut dosyasıdır .:

 #!/bin/bash

 LOCALFOLDER=/var/www/tee
 REMOTEFOLDER=$(ssh [email protected] 'ls -lA /hfs/tee'| grep -E '^total' | cut -d " " -f 2 > remotessh.txt)
 COMMAND=$(ls -lA $LOCALFOLDER | grep -E '^total' | cut -d " " -f 2 > localssh.txt)
 REM=$(cat remotessh.txt)
 LOCAL=$(cat localssh.txt)

 echo $LOCAL
 echo $REM

 if [ $REM -eq $LOCAL ]
 then
      echo Directories are the same
 else
      echo Directories are differnt
 fi

 #diff localssh.txt remotessh.txt | grep -E '^total' | cut -d " " -f 2
1
stainless

Ssh üzerine monte edilmiş sshfs kullanın. Bu kadar hızlı olmayacak, ancak her şeyin yerel bir dosya sisteminde olmasını bekleyen tam araç takımınızı kullanabilirsiniz. Bir alternatif, "ssh -w" ile yapılan bir tünel üzerindeki NFS'dir (veya ssh'ın sınırlama olmadığı diğer iletişimler).

1
Skaperen

grep kullanarak

remote ip: 172.16.98.130
remote file: /etc/ssh/keys-root/authorized_keys
local file: ~/.ssh/id_rsa.pub

Şimdi grep kullanarak uzak dosyanın içeriğini yerel dosyayla karşılaştırın

grep -w "$(cat ~/.ssh/id_rsa.pub)" <<< $(sshpass -p "mypassword" ssh [email protected] 'cat /etc/ssh/keys-root/authorized_keys')

grep komutunun başarı durumunu kontrol etme

echo $?
# 0

SSH şifresiz oturum açmayı ayarlamak için bu fikri kullanın:

if ! grep "$(cat ~/.ssh/id_rsa.pub)" <<< $(sshpass -p "mypassword" ssh [email protected] cat /etc/ssh/keys-root/authorized_keys) &>/dev/null; then
  cat ~/.ssh/id_rsa.pub | sshpass -p "mypassword" ssh [email protected] "cat >> /etc/ssh/keys-root/authorized_keys"
fi

ssh [email protected]

Not: Parolayı interaktif olarak sshpass komutuna geçirmek için ssh paketinin kurulu olduğundan emin olun.

0
Sathish