SSH Deep Dive: Keys, ~/.ssh/config, ssh-agent, Tunnels, Jump Hosts, scp, rsync आणि sftp
जवळजवळ प्रत्येक Linux server पर्यंत SSH ने पोहोचतो. आधीच्या chapters मधे ssh ने login केलं; आता खोलवर: key types आणि ssh-keygen, ssh-copy-id ने keys copy, ~/.ssh/config file, ssh-agent, local, remote आणि dynamic tunnels, ProxyJump ने jump hosts, आणि scp, rsync आणि sftp ने files हलवणं. प्रत्येक command ला Why, What आणि How, खऱ्या teams मधल्या safe defaults सह.
या chapter मध्ये तुम्ही काय शिकाल
- SSH keys बनवा आणि सांभाळा
- ssh-copy-id ने servers वर keys
- Typing वाचवायला ~/.ssh/config
- ssh-agent आणि agent forwarding safely
- Local, remote आणि dynamic tunnels आणि jump hosts
- scp, rsync आणि sftp ने files copy
1. रोजचं उदाहरण: society gate आणि तुमची स्वतःची चावी
हे का लागतं?
तुमची housing society प्रत्येक flat owner ला चावी देते. Guard कडे कोणत्या चाव्या gate उघडू शकतात त्याची list असते. मागच्या wing मधल्या flat ला जायला आधी main gate मधून जाता. वारंवार जात असाल तर flat number आणि wing diary मधे लिहून ठेवता म्हणजे दरवेळी विचारावं लागत नाही.
हे काय आहे?
तुमची private key = खिशातली चावी (कधी share नाही). Public key = guard कडची copy (authorized_keys). Main gate = jump host (bastion). Diary = ~/.ssh/config. चालताना चावी हातात = ssh-agent.
कसं करायचं (step by step)
2. ssh-keygen: key pair बनवा
हे का लागतं?
Passwords guess होऊ शकतात आणि servers वर बहुतेक disabled. Keys जास्त strong आणि automate होतात.
हे काय आहे?
ssh-keygen -t ed25519 -C 'comment' modern key: ~/.ssh/id_ed25519 (private) आणि id_ed25519.pub (public). Passphrase वापरा. -f file नाव. जुन्या systems साठीच -t rsa -b 4096. ssh-keygen -lf FILE fingerprint; -p passphrase बदल.
कसं करायचं (step by step)
- नवी key.
ssh-keygen -t ed25519 -C 'ravi@laptop'
Output:
Your identification has been saved in /home/ravi/.ssh/id_ed25519
The key fingerprint is: SHA256:Zr1x... ravi@laptop
याचा अर्थ: दोन files.
- CI साठी वेगळी key.
ssh-keygen -t ed25519 -f ~/.ssh/deploy_ci -N '' -C 'ci-deploy'
Output:
Your public key has been saved in /home/ravi/.ssh/deploy_ci.pub
याचा अर्थ: Robot साठी passphrase नाही; server वर restrict.
- Fingerprint.
ssh-keygen -lf ~/.ssh/id_ed25519.pub
Output:
256 SHA256:Zr1x... ravi@laptop (ED25519)
याचा अर्थ: Admin ला दिसणाऱ्याशी तुलना.
3. Key permissions आणि authorized_keys
हे का लागतं?
इतर users वाचू शकतील अशा keys SSH नाकारतो. चुकीच्या permissions हे key login fail होण्याचं मुख्य कारण.
हे काय आहे?
~/.ssh 700, private keys 600, authorized_keys 600, home group-writable नाही. authorized_keys मधे प्रत्येक line ला एक public key, सुरुवातीला from="10.0.0.0/8",command="...",no-port-forwarding सारखे options.
कसं करायचं (step by step)
- Permissions fix.
chmod 700 ~/.ssh && chmod 600 ~/.ssh/id_ed25519 ~/.ssh/authorized_keys && ls -ld ~/.ssh
Output:
drwx------ 2 ravi ravi 4096 ~/.ssh
याचा अर्थ: बरोबर.
- CI key restrict.
cat ~/.ssh/authorized_keys
Output:
from="10.0.9.0/24",no-agent-forwarding,no-pty ssh-ed25519 AAAAC3... ci-deploy
याचा अर्थ: फक्त CI subnet मधून, shell tty नाही.
- SELinux context.
restorecon -Rv ~/.ssh
Output:
Relabeled /home/ravi/.ssh/authorized_keys
याचा अर्थ: Files वेगळ्या पद्धतीने copy झाल्या असतील तर.
4. ssh-copy-id: तुमची key install
हे का लागतं?
Key हाताने copy केल्यास तुटलेल्या lines आणि चुकीच्या permissions. ssh-copy-id बरोबर करतो.
हे काय आहे?
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host remote authorized_keys मधे key जोडतो आणि permissions fix. एकदा password login (किंवा आधीची key) लागते. Cloud मधे बहुतेक launch वेळी keys set.
कसं करायचं (step by step)
- Copy.
ssh-copy-id -i ~/.ssh/id_ed25519.pub ravi@10.0.1.30
Output:
Number of key(s) added: 1
Now try logging into the machine
याचा अर्थ: झालं.
- फक्त ती key.
ssh -i ~/.ssh/id_ed25519 -o PasswordAuthentication=no ravi@10.0.1.30 hostname
Output:
app-30
याचा अर्थ: Key login चालतं.
5. ssh options: -i, -p, -v, -o आणि एक command चालवणं
हे का लागतं?
बहुतेक वेगळी key, वेगळा port, किंवा login का fail ते debug लागतं.
हे काय आहे?
-i KEY key निवडतो, -p PORT port, -v/-vv/-vvv debug output, -o Option=value कोणताही config option, -t tty. ssh host 'command' एक command चालवून परत. Hung session ला नवीन line वर ~. .
कसं करायचं (step by step)
- दुसरा port.
ssh -p 2222 ravi@bastion.example.com
Output:
Last login: ...
याचा अर्थ: sshd 2222 वर.
- एक command.
ssh ravi@app-30 'uptime; df -h /'
Output:
10:02 up 41 days, load 0.21
/dev/nvme0n1p1 20G 11G 9G 55% /
याचा अर्थ: Shell शिवाय quick checks.
- Debug.
ssh -v ravi@app-30 2>&1 | grep -E 'Offering|Authenticated|denied'
Output:
debug1: Offering public key: /home/ravi/.ssh/id_ed25519 ED25519
debug1: Authenticated to app-30
याचा अर्थ: कोणती key वापरली ते.
- अनेक servers वर.
for h in app-30 app-31; do ssh -o BatchMode=yes $h hostname; done
Output:
app-30
app-31
याचा अर्थ: BatchMode password विचारण्याऐवजी fail.
6. known_hosts आणि host key warnings
हे का लागतं?
Host key सिद्ध करते की तुम्ही खऱ्या server ला पोहोचलात, attacker ला नाही. Rebuilt servers ची बदलते, आणि SSH warn करतो.
हे काय आहे?
~/.ssh/known_hosts host keys ठेवतं. 'REMOTE HOST IDENTIFICATION HAS CHANGED' म्हणजे key वेगळी. Server rebuild झाला हे माहीत असेल तर ssh-keygen -R host ने जुनी line काढा. ssh-keyscan host host keys print (दुसऱ्या मार्गाने verify).
कसं करायचं (step by step)
- Warning.
ssh ravi@10.0.1.30
Output:
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
Offending ED25519 key in /home/ravi/.ssh/known_hosts:14
याचा अर्थ: थांबा आणि rebuild confirm.
- जुनी key काढा.
ssh-keygen -R 10.0.1.30
Output:
# Host 10.0.1.30 found: line 14
/home/ravi/.ssh/known_hosts updated.
याचा अर्थ: पुढच्या login ला नवी accept.
- Automation साठी आधीच.
ssh-keyscan -t ed25519 git.example.com >> ~/.ssh/known_hosts
Output:
# git.example.com:22 SSH-2.0-OpenSSH_9.6
याचा अर्थ: आधी fingerprint verify.
7. ~/.ssh/config: settings save
हे का लागतं?
दिवसातून अनेक वेळा ssh -i ~/.ssh/k -p 2222 ec2-user@15.1.2.3 type करणं slow आणि चुका.
हे काय आहे?
Blocks Host ALIAS ने सुरू, मग HostName, User, Port, IdentityFile, IdentitiesOnly yes, ProxyJump, ServerAliveInterval. Host * सगळ्यांसाठी defaults. File 600. scp, rsync आणि git पण aliases वापरतात.
कसं करायचं (step by step)
- Config file.
cat ~/.ssh/config
Output:
Host web1
HostName 15.1.2.3
User ec2-user
IdentityFile ~/.ssh/aws_prod.pem
IdentitiesOnly yes
Host *
ServerAliveInterval 30
याचा अर्थ: आता फक्त: ssh web1
- ssh काय वापरेल.
ssh -G web1 | grep -E '^(hostname|user|identityfile)'
Output:
hostname 15.1.2.3
user ec2-user
identityfile ~/.ssh/aws_prod.pem
याचा अर्थ: Final merged settings.
- Wildcards.
Host app-*
User deploy
ProxyJump bastion
Output:
(config)
याचा अर्थ: सगळे app hosts bastion मार्गे.
8. ssh-agent आणि ssh-add
हे का लागतं?
Passphrase असेल तर प्रत्येक login ला type करावा लागेल. Agent session भर unlocked key memory मधे ठेवतो.
हे काय आहे?
eval "$(ssh-agent -s)" सुरू. ssh-add ~/.ssh/id_ed25519 key load; ssh-add -l list; ssh-add -D सगळ्या काढा; ssh-add -t 3600 lifetime. Agent forwarding (ssh -A) remote host ला तुमचा agent वापरू देतो; फक्त विश्वासाच्या hosts वर, ProxyJump जास्त चांगलं.
कसं करायचं (step by step)
- सुरू आणि add.
eval "$(ssh-agent -s)" && ssh-add -t 8h ~/.ssh/id_ed25519
Output:
Agent pid 4412
Identity added: /home/ravi/.ssh/id_ed25519 (ravi@laptop)
Lifetime set to 28800 seconds
याचा अर्थ: Passphrase एकदाच.
- List.
ssh-add -l
Output:
256 SHA256:Zr1x... ravi@laptop (ED25519)
याचा अर्थ: Load झाली.
- खूप keys.
ssh web1
Output:
Received disconnect: Too many authentication failures
याचा अर्थ: Agent 6 keys देतो; IdentitiesOnly yes.
9. ProxyJump: bastion मार्गे private servers
हे का लागतं?
Private servers ना public IP नाही. Key copy न करता jump host (bastion) मार्गे जायचं.
हे काय आहे?
ssh -J user@bastion user@private bastion मार्गे; key local राहते. Commas ने chain: -J b1,b2. Config मधे: ProxyJump bastion. जुनी पद्धत: ProxyCommand ssh -W %h:%p bastion.
कसं करायचं (step by step)
- एक jump.
ssh -J ec2-user@bastion.example.com ec2-user@10.0.3.40
Output:
[ec2-user@db-40 ~]$
याचा अर्थ: Private subnet मधे.
- Config पद्धत.
Host bastion
HostName bastion.example.com
User ec2-user
Host db40
HostName 10.0.3.40
ProxyJump bastion
Output:
ssh db40
याचा अर्थ: तेच, छोटं.
- Jump मार्गे scp.
scp -J bastion backup.sql db40:/tmp/
Output:
backup.sql 100% 40MB 22MB/s
याचा अर्थ: Config ने rsync पण.
10. Local port forwarding: ssh -L
हे का लागतं?
Database किंवा admin page फक्त private network मधे. -L ते safely तुमच्या laptop वर आणतो.
हे काय आहे?
ssh -L LOCALPORT:TARGET:TARGETPORT host. localhost:LOCALPORT ला traffic host मार्गे TARGET:TARGETPORT कडे. फक्त tunnel साठी -N (command नाही) आणि -f (background). फक्त 127.0.0.1 वर bind (default).
कसं करायचं (step by step)
- Private Postgres.
ssh -N -L 15432:db.internal:5432 bastion
Output:
(waits)
याचा अर्थ: आता laptop वर psql -h localhost -p 15432.
- Admin page.
ssh -fN -L 8080:127.0.0.1:8080 web1 && curl -sI http://localhost:8080
Output:
HTTP/1.1 200 OK
याचा अर्थ: web1 वर localhost ला bound app.
- Port वापरात.
ssh -N -L 8080:127.0.0.1:8080 web1
Output:
bind [127.0.0.1]:8080: Address already in use
याचा अर्थ: दुसरा local port.
11. Remote (-R) आणि dynamic (-D) forwarding
हे का लागतं?
-R remote server ला तुमच्या बाजूचं काही (जसं demo app) पोहोचू देतो. -D private network browse करायला SOCKS proxy.
हे काय आहे?
ssh -R REMOTEPORT:localhost:LOCALPORT host, host वर REMOTEPORT उघडतो जो तुमच्याकडे परत येतो. Default ला server च्या localhost ला bind (GatewayPorts). ssh -D 1080 host localhost:1080 वर SOCKS5 proxy.
कसं करायचं (step by step)
- Local app share.
ssh -N -R 9000:localhost:3000 web1
Output:
(waits)
याचा अर्थ: web1 वर: curl localhost:9000 तुमच्या laptop चा 3000.
- SOCKS proxy.
ssh -N -D 1080 bastion &
curl --socks5-hostname localhost:1080 http://grafana.internal:3000/login -sI
Output:
HTTP/1.1 200 OK
याचा अर्थ: Private hosts नावाने browse.
12. scp: साधा copy
हे का लागतं?
Server ला किंवा server कडून एक file पाठवायचा सगळ्यात जलद मार्ग.
हे काय आहे?
scp SRC DEST, remote paths host:path. Folders साठी -r, -P PORT (capital P), -i KEY, -J jump. Modern OpenSSH आत scp SFTP वर चालवतो. मोठ्या किंवा वारंवार copies साठी rsync.
कसं करायचं (step by step)
- Upload.
scp app.tar.gz web1:/tmp/
Output:
app.tar.gz 100% 18MB 30.1MB/s 00:00
याचा अर्थ: Config alias.
- Folder download.
scp -r web1:/var/log/nginx ./nginx-logs
Output:
access.log 100% 220MB
error.log 100% 3MB
याचा अर्थ: Recursive copy.
- Custom port.
scp -P 2222 report.pdf ravi@bastion.example.com:~
Output:
report.pdf 100%
याचा अर्थ: scp साठी capital P.
scp सविस्तर: upload, download, -r, -P, -i आणि server ते server
हे का लागतं?
Server वर file टाकायची किंवा log laptop वर आणायचा, हे नेहमी लागतं. scp हे SSH वरून करतो, म्हणून encrypted, आणि तुमच्या existing keys वापरतो.
हे काय आहे?
scp cp सारखं copy करतो, पण एक बाजू host:path असते. पहिला path source, शेवटचा destination. Remote path user@host:/path सारखा.
नेहमीचे options
| Option | काय करतो |
|---|---|
-r | Folder आणि आतलं सगळं copy. |
-P PORT | SSH port (capital P; ssh ला small -p). |
-i KEY | ही private key file वापरा. |
-3 | तुमच्या machine मधून server ते server copy. |
-C | Transfer करताना compress. |
-p | Times आणि modes ठेवा. |
-l KBIT | Bandwidth Kbit/s मधे मर्यादित. |
कसं करायचं (step by step)
- Upload: आधी local file, शेवटी server.
scp menu-diwali.pdf rohan@192.168.1.40:/var/www/cafe/
Output:
menu-diwali.pdf 100% 812KB 9.8MB/s 00:00
याचा अर्थ: File आता server वर /var/www/cafe/ मधे.
- Download: आधी server, शेवटी local.
scp rohan@192.168.1.40:/var/log/nginx/error.log ~/Downloads/
Output:
error.log 100% 64KB 7.1MB/s 00:00
याचा अर्थ: शेवटचा path . म्हणजे current folder.
- -r ने आख्खा folder.
scp -r invoices-oct rohan@192.168.1.40:~/backup/
Output:
inv-001.pdf 100% ...
inv-002.pdf 100% ...
याचा अर्थ: -r नसेल तर "not a regular file".
- -P ने custom port.
scp -P 2022 db.sql.gz rohan@shop.example.in:/tmp/
Output:
db.sql.gz 100% 18MB 11MB/s 00:01
याचा अर्थ: Server वर SSH 22 नाही, 2022 वर.
- -i ने key file (cloud servers).
scp -i ~/keys/mumbai.pem app.jar ubuntu@13.233.10.5:/opt/app/
Output:
app.jar 100% 42MB 20MB/s 00:02
याचा अर्थ: .pem key chmod 600 हवी, नाहीतर SSH नाकारतो.
- Server ते server.
scp -3 old-db:/backup/shop.sql new-db:/restore/
Output:
shop.sql 100% 120MB 30MB/s 00:04
याचा अर्थ: -3 data तुमच्या laptop मधून पाठवतो, त्यामुळे दोन servers ना एकमेकांच्या keys लागत नाहीत. -3 नसेल तर पहिला server थेट दुसऱ्याला जोडतो.
खालच्या tasks मधे सराव करा: सराव tasks
13. rsync: SSH वर smart sync
हे का लागतं?
rsync फक्त बदललेलं पाठवतो, resume करतो, आणि permissions ठेवतो. Deploys, backups आणि migrations साठीचं tool.
हे काय आहे?
rsync -avz SRC/ host:DEST/: -a archive (perms, times, links), -v verbose, -z compress. -n (--dry-run) काय होईल ते. --delete DEST मधल्या जास्तीच्या files काढतो (सावध). --progress, --partial, -e 'ssh -p 2222'. SRC वर trailing slash म्हणजे 'आतलं content'.
| Option | अर्थ |
|---|---|
| -a | Archive: perms, times, links ठेवा |
| -z | Transit मधे compress |
| -n | Dry run |
| --delete | Mirror: जास्तीचं काढा |
| --exclude | Pattern skip |
| -P | Progress + partial |
कसं करायचं (step by step)
- आधी dry run.
rsync -avzn --delete ./site/ web1:/var/www/site/
Output:
deleting old.html
index.html
sent 1.2K bytes
याचा अर्थ: Delete आधी दाखवतो.
- खरं run.
rsync -avz --delete ./site/ web1:/var/www/site/
Output:
index.html
sent 4.8K bytes received 92 bytes
याचा अर्थ: फक्त बदल.
- Excludes सह backup.
rsync -aP --exclude 'cache/' web1:/srv/data/ /backup/data/
Output:
data/big.bin 2.1G 100% 95MB/s
याचा अर्थ: Resumable मोठी copy.
- Slash महत्त्वाचा.
rsync -a src web1:/opt/ vs rsync -a src/ web1:/opt/
Output:
/opt/src/... vs /opt/...
याचा अर्थ: Slash सह: फक्त content.
14. sftp: interactive file transfer
हे का लागतं?
Partners आणि non-Linux users ना बहुतेक SFTP-only accounts. Shell शिवाय browse आणि transfer.
हे काय आहे?
sftp user@host prompt उघडतो: ls, cd, lcd, get, put, mkdir, rm, bye. -b batchfile file मधले commands (scripts साठी). Servers ChrootDirectory आणि ForceCommand internal-sftp ने users ना SFTP मधे बंद करतात.
कसं करायचं (step by step)
- Interactive.
sftp vendor@files.example.com
sftp> cd inbound
sftp> put invoice-oct.csv
sftp> bye
Output:
Uploading invoice-oct.csv to /inbound/invoice-oct.csv
याचा अर्थ: Upload झालं.
- Batch mode.
printf 'cd outbound\nget *.csv\n' > b.txt && sftp -b b.txt vendor@files.example.com
Output:
Fetching /outbound/orders.csv
याचा अर्थ: Cron jobs साठी.
15. अनेक industries मधली खरी उदाहरणं
हे का लागतं?
तेच Linux skill प्रत्येक प्रकारच्या company मध्ये लागतं. वेगवेगळ्या ठिकाणी पाहिलं की लक्षात राहतं.
हे काय आहे?
प्रत्येक row म्हणजे एक काल्पनिक team. कोण हे वापरतं आणि कसं ते दाखवते.
कसं करायचं (step by step)
| Team आणि शहर | ते कसं वापरतात | Command |
|---|---|---|
| Vikram, IT services, Pune | सगळ्या private servers साठी ProxyJump | ssh -J bastion db40 |
| Sarah, healthcare, Boston | from= options ने CI keys restrict | from="10.0.9.0/24" ssh-ed25519 ... |
| Yuki, gaming, Tokyo | आधी dry run सह rsync deploys | rsync -avzn --delete ./build/ web1:/srv/ |
| Carlos, retail, Mexico City | Suppliers सह SFTP batch jobs | sftp -b b.txt vendor@files |
| Nadia, bank, Frankfurt | Audits साठी private DBs ला tunnels | ssh -N -L 15432:db.internal:5432 bastion |
| Omkar, agri startup, Satara | नीटनेटका ~/.ssh/config | ssh -G web1 |
16. नेहमीच्या errors आणि त्यांचे fixes
हे का लागतं?
हे errors सगळ्यांना येतात. कारण माहीत असलं की तास वाचतात.
हे काय आहे?
आधी नेमका message वाचा. मग खालच्या row शी जुळवा.
कसं करायचं (step by step)
| दिसणारा error | का होतं | Fix कसा करायचा |
|---|---|---|
Permission denied (publickey) | authorized_keys मधे key नाही, चुकीचा user किंवा key | कोणती key दिली ते debug.ssh -v user@host |
UNPROTECTED PRIVATE KEY FILE! | Private key इतरांना वाचता येते | 600 करा.chmod 600 ~/.ssh/id_ed25519 |
REMOTE HOST IDENTIFICATION HAS CHANGED | Host key बदलली: rebuild किंवा attack | Confirm करून जुनी key काढा.ssh-keygen -R host |
Too many authentication failures | Agent ने खूप keys दिल्या | निवडलेल्या key सह IdentitiesOnly.ssh -o IdentitiesOnly=yes -i KEY host |
Connection timed out (port 22) | Security group/firewall 22 block | तुमचा IP allow किंवा bastion.nc -zv -w 3 host 22 |
Could not open a connection to your authentication agent | या shell मधे agent नाही | सुरू करा.eval "$(ssh-agent -s)" |
bind: Address already in use (tunnel) | Local port busy | दुसरा local port.ss -ltnp 'sport = :8080' |
rsync: command not found (remote) | दुसऱ्या बाजूला rsync नाही | तिथे install.ssh web1 'sudo dnf install -y rsync' |
scp: ssh: connect to host ... port 22: Connection refused with -p | -P ऐवजी -p | scp ला capital -P.scp -P 2222 file host: |
channel 2: open failed: connect failed: Connection refused | Tunnel target listening नाही | SSH server वरून target host:port.ssh bastion 'nc -zv db.internal 5432' |
17. Troubleshooting step by step
हे का लागतं?
SSH login fail झालं की network पासून auth पर्यंत.
हे काय आहे?
वरून खाली जा. ज्या step ला problem दिसतो तिथे थांबा.
कसं करायचं (step by step)
- Port open?
nc -zv -w 3 host 22
- बरोबर settings?
ssh -G host | head
- कोणती key?
ssh -v host
- Permissions ठीक?
ls -la ~/.ssh
- Server log.
sudo journalctl -u sshd -n 30
- Server वर key?
grep -c ssh-ed25519 ~/.ssh/authorized_keys
18. Lab 1: Keys, config आणि agent
हे का लागतं?
Key बनवा, host वर install करा (localhost पण चालतं), आणि alias ने login.
हे काय आहे?
पूर्ण hands-on lab. प्रत्येक step test Linux machine वर करा (EC2 instance, VM किंवा WSL).
कसं करायचं (step by step)
- बनवा.
ssh-keygen -t ed25519 -f ~/.ssh/lab_key -C lab
Output:
Your identification has been saved
- localhost वर install.
ssh-copy-id -i ~/.ssh/lab_key.pub $USER@localhost
Output:
Number of key(s) added: 1
- Config alias.
printf 'Host lab\n HostName localhost\n IdentityFile ~/.ssh/lab_key\n IdentitiesOnly yes\n' >> ~/.ssh/config; chmod 600 ~/.ssh/config
Output:
(no output)
- Agent load.
eval "$(ssh-agent -s)"; ssh-add ~/.ssh/lab_key
Output:
Identity added
- Login.
ssh lab hostname
Output:
yourhost
19. Lab 2: Tunnel आणि sync
हे का लागतं?
Tunnel मार्गे localhost-only web server पोहोचा आणि rsync ने folder sync.
हे काय आहे?
पूर्ण hands-on lab. प्रत्येक step test Linux machine वर करा (EC2 instance, VM किंवा WSL).
कसं करायचं (step by step)
- Private server.
python3 -m http.server 8001 --bind 127.0.0.1 &
Output:
Serving HTTP on 127.0.0.1 port 8001
- Tunnel.
ssh -fN -L 9001:127.0.0.1:8001 lab
Output:
(no output)
- Test.
curl -sI http://localhost:9001
Output:
HTTP/1.0 200 OK
- Dry-run sync.
mkdir -p /tmp/a && touch /tmp/a/f1 && rsync -avn /tmp/a/ lab:/tmp/b/
Output:
f1
- खरं sync.
rsync -av /tmp/a/ lab:/tmp/b/
Output:
sent 120 bytes
Ravindra Bagale's Tip
Put every server in ~/.ssh/config with IdentitiesOnly yes and use ProxyJump instead of agent forwarding (-A). Your key never sits on the bastion, and a hacked bastion cannot use your agent.
Ravindra Bagale's Tip – मराठी
प्रत्येक server ~/.ssh/config मधे IdentitiesOnly yes सह ठेवा आणि agent forwarding (-A) ऐवजी ProxyJump वापरा. तुमची key bastion वर कधी नसते, आणि hacked bastion तुमचा agent वापरू शकत नाही.
Ravindra Bagale's Tip – हिंदी
हर server को ~/.ssh/config में IdentitiesOnly yes के साथ रखें और agent forwarding (-A) की जगह ProxyJump इस्तेमाल करें. आपकी key bastion पर कभी नहीं होती, और hacked bastion आपका agent इस्तेमाल नहीं कर सकता.
20. नेहमी विचारले जाणारे प्रश्न
प्र. ed25519 की RSA?
ed25519: छोटी, जलद, modern. जुन्या systems साठीच RSA 4096.
प्र. Teammate ला private key देऊ?
कधी नाही. प्रत्येकाची स्वतःची key.
प्र. scp की rsync?
मोठ्या, वारंवार किंवा resumable copies साठी rsync.
प्र. -N काय करतो?
Remote command नाही; फक्त tunnel.
प्र. Agent forwarding unsafe?
Connected असताना remote host वरचा root तुमचा agent वापरू शकतो.
प्र. rsync --delete ची भीती का?
Destination मधल्या files काढतो; आधी नेहमी dry-run.
प्र. SSH drop होऊ नये?
Config मधे ServerAliveInterval 30.
प्र. Bastion म्हणजे?
Private network ला एकमेव SSH entry असलेला hardened jump host.
21. मुलाखत प्रश्न आणि उत्तरं
Beginner level
प्र. Modern key?
ssh-keygen -t ed25519.
प्र. Server ला key?
ssh-copy-id user@host.
प्र. Server ला file?
scp file host:/path.
प्र. Private key permissions?
600.
Mid level level
प्र. Laptop वरून private DB?
ssh -L 15432:db:5432 bastion.
प्र. ProxyJump?
Keys copy न करता jump host मार्गे connect.
प्र. Rebuild नंतर host key changed?
ssh-keygen -R host, मग reconnect आणि verify.
प्र. rsync trailing slash?
SRC/ content; SRC folder स्वतः.
Senior level
प्र. Fleet वर SSH harden?
फक्त keys, root login नाही, AllowGroups, MFA/SSO certs, bastion, logging.
प्र. Leaked key rotate?
सगळ्या authorized_keys मधून काढा (config mgmt), नवी key, logs audit.
प्र. -L vs -R vs -D?
-L remote local वर, -R local remote वर, -D SOCKS proxy.
प्र. SSH certificates का?
Short-lived signed keys; authorized_keys पसारा नाही.
घरी करून बघा
- तीन hosts सह ~/.ssh/config बनवा त्यात एक ProxyJump, आणि प्रत्येक ssh -G ने तपासा.
- दोन folders तुलना करायला rsync -avn वापरा आणि output ची प्रत्येक line समजवा.
सराव Tasks
London Legal LLP हा लंडन मधला कायदा सेवा व्यवसाय आहे. Oliver Hughes त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे GBP मध्ये मोजले जातात आणि AWS resources eu-west-2 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.
0 / 23
सोपं Modern key
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: ops@build comment सह ed25519 key.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं Fingerprint
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: ~/.ssh/gitlab_key.pub चा fingerprint.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं Key install
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: 10.0.8.8 वर user deploy साठी ~/.ssh/gitlab_key.pub install.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं Key permission fix
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: ~/.ssh/gitlab_key फक्त तुम्हाला वाचता यावी.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं दुसरा port
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: port 2200 वर admin@gw.example.org ला SSH.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं एक key काढा
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: Agent मधून फक्त ~/.ssh/gitlab_key काढा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं Folder खाली copy
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: host web2 वरून /etc/nginx folder current folder मधे.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं File upload
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: scp ने invoice.pdf 10.0.4.7 वर user meera म्हणून /tmp/ ला.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं File download
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: scp ने 10.0.4.7 (user meera) वरून /var/log/app.log current folder मधे.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम नाव असलेली key file
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: ~/.ssh/gitlab_key file मधे ed25519 key.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम एक remote command
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: Shell न उघडता app-50 वर free -h.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Host key काढा
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: 10.0.8.8 ची जुनी known_hosts entry काढा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Final settings
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: app-50 साठी ssh वापरणार असलेल्या merged settings.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Lifetime सह agent
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: ~/.ssh/gitlab_key agent मधे 2 तासांसाठी.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Bastion मार्गे
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: jump host admin@jump.example.org मार्गे admin@10.0.9.12.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Port वर scp
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: scp ने port 2200 वर notes.txt gw च्या home folder ला.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Exclude सह rsync
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: ./photos/ nas:/backup/photos/ ला archive copy पण tmp folder skip.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Key सह scp
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: ~/.ssh/ops.pem key वापरून build.zip ec2-user@3.6.9.12 च्या home ला.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
अवघड Local tunnel
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: gw मार्गे local port 13306 ते mysql.internal:3306, shell नाही.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
अवघड SOCKS proxy
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: gw मार्गे local port 1081 वर SOCKS proxy, shell नाही.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
अवघड rsync dry run
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: delete, archive, verbose सह ./dist/ ते web2:/srv/app/ mirror preview.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
अवघड Server ते server
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: host app1 वरची /srv/dump.sql host app2 च्या /srv/ ला, data तुमच्या machine मधून.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
अवघड Port वर folder
का: SSH प्रत्येक server चं मुख्य दार.
काय करायचं: site folder host gw वर user deploy म्हणून /var/www/ ला, SSH port 2222.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
22. संबंधित chapters
- DevOps साठी Linux Ops Refresh
- Automation साठी Bash Scripting
- Linux grep आणि find Commands Examples सह
- Linux Servers मध्ये Passwordless SSH
थोडक्यात सांगायचं तर
- ssh-keygen -t ed25519 keys; 600 आणि passphrase.
- ssh-copy-id keys install.
- ~/.ssh/config hosts, users, keys, jumps.
- ssh-agent unlocked keys ठेवतो.
- Jump hosts साठी -J; tunnels साठी -L, -R, -D.
- scp साधा, rsync smart, sftp interactive.
उजळणी, तुलना आणि मुलाखत cards
हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.








अजून cards: Ravi Sir's Cards.