pengembangan-web-mp-pd.com

Bagaimana perbedaan dari ssh?

Bagaimana cara membedakan file/folder di mesin asalkan satu-satunya konektivitas yang tersedia adalah ssh?

180

Akhirnya saya menemukan solusi hebat: vimdiff

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

terima kasih kepada http://linux.spiney.org/remote_diff_with_vim_and_ssh lihat juga http://www.vim.org/scripts/script.php?script_id=1075 .

108

Anda dapat melakukannya dengan Bash substitusi proses :

 diff foo <(ssh myServer 'cat foo')

Atau, jika keduanya ada di server jarak jauh:

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

Jika Anda hanya ingin melihat file apa yang berbeda, bukan berbeda dari file sebenarnya, maka Anda dapat menggunakan rsync --dry-run

62
Rory

Inilah resep baris perintah cepat dan kotor lainnya. Berbeda dengan jawaban yang dipilih, ia bekerja di dalam makefiles:

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

Gunakan scp untuk membawa file ke mesin umum dan diff mereka di sana?

Atau, jika Anda hanya ingin tahu apakah file berbeda , atau hash, hash dengan md5sum di setiap mesin.

Anda juga dapat melihat sesuatu seperti SSHFS , tapi saya tidak tahu seberapa baik algoritma seperti diff melakukan lebih dari itu.

10
Ian Clelland

Salah satu cara, jika mungkin pada sistem Anda adalah dengan hanya me-mount sistem file jarak jauh dengan sshfs .

7
Zoredache

Anda dapat menggunakan rsync dalam mode dry run, seperti yang disarankan secara singkat di jawaban lain . Ini mencantumkan file yang berbeda.

Untuk itu, gunakan opsi rvnc (r = rekursif, v = verbose, n = dry-run, c = checksum ). Dengan rsync dalam mode tarik (rsync [OPTION...] [[email protected]]Host:SRC... [DEST]), contohnya adalah:

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

Ingat , ini tidak memberikan info apakah file lokal atau jarak jauh lebih baru. Hanya jika mereka berbeda.

3
zzapper

Jika Anda memiliki sshfs dan perlu membedakan direktori:

mkdir remote_path
sshfs [email protected]:/path/ remote_path
diff -r path remote_path
2
metrix
  • pada mesin lokal Anda, buat salinan rekursif dari direktori yang ingin Anda bedakan. Contohnya:

    cp -R dir replica
    
  • gunakan rsync untuk mereplikasi direktori jarak jauh melalui salinan lokal:

     rsync remote:/path/to/dir replica
    
  • gunakan diff untuk menemukan perbedaan antara direktori lokal dan replika lokal dari yang jauh:

    diff dir replica
    
2
salva

Anda juga dapat mencoba menggeneralisasi pendekatan dengan membuat fungsi bash, mungkin di ~/.bashrc Anda:

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

kemudian memohonnya dengan konstruk seperti:

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

Dengan menggunakan diff dengan -s, ini juga akan melaporkan jika file identik.

Bersulang! Jim

1
Jim Swain

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

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

1
Riaan

Inilah cara saya melakukannya.

Saya menggunakan SFTP ke server jarak jauh dan memasukkan nama pengguna/pwd saya ketika diminta. Kemudian saya menggunakan direktori yang dibuat di direktori .gvfs di direktori home saya di perintah diff.

diff -r --brief/home/user dir/.gvfs/SFTP\on\freenas.local/path untuk dir/dir1/path ke dir/dir2 lokal

1
Peter

Ini adalah skrip yang dapat membantu membedakan folder lokal dan folder jauh .:

 #!/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

Gunakan sshfs dipasang di ssh. Ini tidak akan secepat itu, tetapi Anda dapat menggunakan seperangkat alat lengkap yang mengharapkan semuanya berada pada sistem file lokal. Alternatifnya adalah NFS di atas terowongan yang dibuat dengan "ssh -w" (atau komunikasi lain di mana ssh bukan batasannya).

1
Skaperen

menggunakan grep

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

Sekarang bandingkan konten file jarak jauh dengan file lokal menggunakan grep

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

periksa status keberhasilan perintah grep

echo $?
# 0

Menggunakan ide ini untuk mengatur login tanpa kata sandi SSH:

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]

Catatan: Pastikan sshpass paket diinstal untuk meneruskan kata sandi secara non-interaktif ke perintah ssh.

0
Sathish