jak uniknout znaku jednoduché uvozovky v příkazu ssh/remote bash?
<p>stavím malou sadu skriptů pro vzdálené spouštění, zastavování a kontrolu stavu procesu. <code>stop</code> těchto skriptů by mělo hledat proces a zabít ho. proto:</p><pre><code>ssh deploy@hera 'kill -9 `ps -ef | grep mapreducenode | grep -v "grep" | awk -f " " '{print $2}' | head -n 1`' </code></pre><p>problém je v tom, že krok awk tokenizace potřebuje jednoduché uvozovky a tyto střety jsou v rozporu s jednoduchou citací použitou pro provedení vzdáleného příkazu přes ssh. jak lze tyto jednotlivé uvozovky uniknout?</p>
<p>použití</p><pre><code>ssh deploy@hera 'kill -9 `ps -ef | grep mapreducenode | grep -v "grep" | awk -f " " '"'"'{print $2}'"'"' | head -n 1`' </code></pre>
<pre><code>sudo apt update sudo apt install ssh sudo ufw allow 22 # if you have ufw running, but it doesn't hurt to run. </code></pre><p>to je velmi minimum. umožňuje neomezený počet neúspěšných pokusů o heslo na známém portu. přímé přihlášení root je zakázáno (po přihlášení se stále můžete <code>su</code> a <code>sudo</code>). pokud je vaše uživatelské jméno a heslo hádatelné a internet vidí server, někdo <em> se nakonec </em> vnikne.</p><p>nemohu to dostatečně zdůraznit: <strong> <em> je třeba zatvrdit výchozí nastavení. </em> </strong> pro pravděpodobnost, že budou napadeni, ale <a href="https://thepcspy.com/read/making-ssh-secure/">prošel jsem několika návrhy na svém blog</a> . alespoň bych navrhl:</p><ul> <li>přihlášení pomocí klíčů. zakázat přihlášení heslem.</li> <li>přesuňte jej z portu 22. použijte něco šíleného v rozsahu 20000-60000.</li> <li>použijte <code>fail2ban</code> zakazovat lidem, kteří to najdou, a pokusit se to přenést.</li> </ul><p>zabere vám to méně než 10 minut a oni vás vezmou z 1/10000 šance, že se dostanou do pravděpodobnosti tak malé, že na světě není dost papíru, aby mohl napsat její zlomek. vše za předpokladu, že jste opatrní s vaším klíčem, má vlastní přístupové fráze a vy nebudete trubat vaše pověření po celé síti.</p><p>pokud jde o přístup k tomuto serveru ssh z internetu, můžete čelit překážkám v místní síti. pokud je počítač za routerem nat (např. většina domácích sítí) bez přímého příchozího přístupu z internetu, možná budete muset podívat na <a href="https://portforward.com/">přesměrování portů</a> . samozřejmě, pokud nepotřebujete přístup mimo síť, přeskočení tohoto kroku zajistí zabezpečení sítě.</p> Tak jsem si teda zaobjevoval. Kdyby se to nekdy nekomu hodilo...awk '{ E=$0; S=":"; C=gsub(/:/,"",$0); for (i=0; i<7-C; i++){S=S "0:"}; sub("::",S,E); print E; }'A urcite by to slo napsat nejak hezceji a vic cool (a samosebou to neumi IPv6 adresy s teckama ![](/Client.Images/smileys/4.gif) , ale ty se moc nevyskytuji). Napiš si autohotkey script. No, je tu vestavěný režim shell, který dělá zvýrazňování syntaxe, pokud to není již zapnutý, `M-x shell-script-mode`bude to pro vás.


Pokud jde o nástroj, aby skriptování jednodušší. Je tu [bash shell debugger](http://bashdb.sourceforge.net/) , takže pokud si program v bash, který by pomohl dost.


Samozřejmě je tu [eshell](http://www.emacswiki.org/emacs/CategoryEshell) , shell napsaný v Emacs Lisp, takže můžete získat všechny zvýraznění syntaxe byste očekávali od Lisp, automatické dokončování a Emacs LISP debugger. nevim jak vypadaji ve windows takovi ti pruvodci next-next-finish, co se tvari ze umi vsechno a pritom nic ... , nepouzivam je, nicmene obecne staci proste otevrit nastaveni sitoveho adapteru, pridat TCP/IP protokol, dale protokol SMB pro sdileni prostredku v sitich windows a nakonec nastavit ve vlastnostech TCP/ip nejake rozumne adresy napriklad 192.169.0.X a masku na vsech pocitacich napriklad 255.255.255.0 ... to je cele. Někdy stačí oprava cmd jako správce a sfc /scannow entr. <p>k tomu je užitečný zabudovaný <code>type</code>. to vám nejen řekne o aliasech, ale také o funkcích, vestavěných slovech, klíčových slovech a externích příkazech.</p><pre class="lang-none prettyprint-override"><code>$ type ls ls is aliased to `ls --color=auto' $ type rm rm is /bin/rm $ type cd cd is a shell builtin $ type psgrep psgrep is a function psgrep () { ps -ef | { read -r; printf '%s\n' "$reply"; grep --color=auto "$@" } } </code></pre><p><code>type -a cmd</code> zobrazí všechny příkazy pod tímto jménem v pořadí podle priority, což je užitečné pro výše uvedený alias <code>ls</code>, kde alias sám volá <code>ls</code>.</p><pre class="lang-none prettyprint-override"><code>$ type -a ls ls is aliased to `ls --color=auto' ls is /bin/ls </code></pre><p>to vám řekne, že když spustíte <code>ls</code>, <code>/bin/ls</code> bude použito a <code>--color=auto</code> bude zahrnut do seznamu argumentů, kromě všech ostatních, které sami přidáte.</p> Predevším to znamená, že heslo bylo příliš snadno uhodnutelné (nick monk, heslo moncicak - to jen jako příklad) a hlavně podle všeho navíc všude stejné. Takže nové heslo musí splňovat nějaké parametry a pro každou službu použít jiné a tam kde je to možné použít dvouúrovňové ověření. To by pro začátek mohlo stačit. <p>stačí použít <a href="https://linux.die.net/man/1/chsh"><code>chsh</code></a> :</p><pre><code>chsh -s $(which zsh) </code></pre><p><strong> bez </strong> <code>sudo</code> by mělo fungovat. pokud použijete <code>sudo</code>, nezmění shell nikoliv pro vašeho pracovního uživatele, ale pro <em> root</em></p><p>nakonec <strong> se odhlaste z počítače a přihlaste se zpět </strong>.</p><p>odstraňování problémů:</p><ul> <li>máte nainstalován zsh (ii)? <code>dpkg -l zsh</code></li> <li>je vaše shell nastavena na zsh? poslední pole <a href="https://linux.die.net/man/5/passwd"><code>grep $user /etc/passwd</code></a> </li> <li>je zsh <a href="https://linux.die.net/man/5/shells">platné přihlašovací prostředí</a> ? <code>grep zsh /etc/shells</code></li> </ul> Nastav si ve vlastnostech příkazové řádky větší písmo.Win+R - CMD - pravé tlačítko na záhlaví - vlastnosti - písmoMělo by to být společné i pro výstupní okna devpascalu