åç´ä½æ¥ãèªååãã¦äººé¡ã®ç¡é§ãªæéããªããã
ãã®ã¨ã³ããªã¼ã¯ Recruit Engineers Advent Calendar ã® 5æ¥ç®ã®è¨äºã§ãã
ç®æ¬¡
- èªå·±ç´¹ä»
- æéã¯æéã大åã«ä½¿ãã
- sshã§30å°ã®ãµã¼ããã»ããã¢ãããã
- expect ã³ãã³ãã使ãã
- StrictHostKeyChecking no
- chpasswdã§ãã¹ã¯ã¼ãè¨å®
- chmod u+sã¨SUID
- seqã³ãã³ãã¨bashæ¡å¼µæ§æ{1..9}
- Excelæ¥åãèªååããã
- Win32::GuiTest ã§ãã¼ãã¼ãå ¥åãèªåå
- MouseMoveAbsPix ã§ãã¦ã¹æä½ãèªåå
- ãã¤ã³ã¹ã¤ã¼ãã¼ã®èªåå
- BadUSBã«ãããã¼ãã¼ãå ¥åã®èªåå
- ã¾ã¨ã
1. èªå·±ç´¹ä»
@takesakoã§ããæè¿ãã¾ã¤ãã¨ããã²ãããã¨å²¸å·å å·±ãããæè¡ãã§ãã¼ã¨æè¡é¡§åã«å°±ä»»ããä¼ç¤¾ã§å°éå½¹å¡ãæ å½ãã¦ãã¾ãã ä¼ç¤¾ã§ã¯ãã¼ã«ãã£ã³ã°ã¹å ¼å10%ã®åããäºæ¥ä¼ç¤¾ã®ãããã¯ãéçºé¨é¨é·ããã¶ã¤ã³ã°ã«ã¼ãã¨éçºæ¯æ´ã°ã«ã¼ãã®2ã¤ã®ã°ã«ã¼ãããã¼ã¸ã£ãå ¼åããç¾å¨ç´70åã®å 製éçºçµç¹ã®ä½å¶æ§ç¯ã¨éå¶ãè¡ãªã£ã¦ãã¾ãã ä¼ç¤¾ã§ã¯å ¼æ¥ç³è«ã«ãã坿¥ãèªãããã¦ãã¦ãä»å¹´åº¦ã¯ãç¬ç«è¡æ¿æ³äºº2社ãNPOæ³äºº1社ãä¸è¬ç¤¾å£æ³äºº1社ãå ¬ç«å¤§å¦æ³äºº1社ã2çåºã1åè°ä¼ã®äºæ¥ãæãæã¡ããªããè¤æ°ããã¸ã§ã¯ãã®é²è¡ã¨é常æ¥åã並è¡ãã¦è¡ãªã£ã¦ãã¾ããç¾ä»£äººã«ã¨ã£ã¦ãæéã®ç®¡çã¨æå¹æ´»ç¨ã¯é常ã«éè¦ãªèª²é¡ã§ãã
2. æéã¯æéã大åã«ä½¿ãã
ç§ã¯ã¨ã³ã¸ãã¢ã§ãã®ã§ãåç´ãªä½æ¥ã¯ã§ããã ãããã°ã©ã ã§èªååããã³ã¼ããæ¸ãã¦ãæéãçã¿åºãããã«ãã¦ãã¾ãã ãã®ã¨ã³ããªã¼ã§ã¯ãæ°ããã¯ãªãããå¤ããã使ããã¦ããUNIXã®ç´ æ´ãªæã使ããã¨ã«ãã£ã¦ãå°å³ãªä½æ¥ãèªååããæ¸©æ ç¥æ°ãªTIPSãç´¹ä»ãã¦ã¿ã¾ãã
3. sshã§30å°ã®ãµã¼ããã»ããã¢ãããã
ãã¦ããããªã30å°ã®Linuxãµã¼ããã»ããã¢ããããä»äºãæ¥ãã¨ãã¾ããæè¿ã¯ã¤ã¡ã¼ã¸ã®ã³ãã¼ã§è¤æ°ã®ãµã¼ããã»ããã¢ããã§ããã¯ã©ã¦ãç°å¢ãæ´ã£ã¦ãããããã³ãã¼å ã®åºæ¬ã¨ãªããµã¼ãã®ã¤ã¡ã¼ã¸ããã¼ã¹ã«30å°ã®ãµã¼ãã«ç°å¢ãã³ãã¼ãã¦ä½æ¥ããã®ãè¯ãã®ã§ãããã¾ã¨ãã¦è¤æ°å°ã®ãµã¼ãã¸ã®ã³ãã³ãå®è¡ãããããã¨ãããã¾ãã
ã¾ãã¯ã³ãã¼å ã®ãªãªã¸ãã«ã®ãµã¼ããç¨æããssh-keygenã§sshã®ç§å¯éµã¨å ¬ééµã®ãã¢ã使ããå ¬ééµã~/.ssh/authorized_keysã«è¿½è¨ãããã¡ã¤ã«ã®ãã¼ããã·ã§ã³ã600ã«ãã¾ãããã®ã¦ã¼ã¶ã¼åãvi /etc/sudoers ã§è¿½è¨ããsudoã§ããæ¨©éã«ãã¦ããã¾ããã³ã³ããã¼ã©ã¼ã®ãµã¼ãã«ã¯ç§å¯éµãç½®ããã³ãã¼å ã®ãµã¼ãã«ã¯å ¬ééµã®ã¿ãé ç½®ãã¾ããããã¦ãã³ã³ããã¼ã©ã¼ã®ãµã¼ãããsshã§ãã°ã¤ã³ãã¦å種ã»ããã¢ãããé éããè¡ãªãã¾ãã
4. expect ã³ãã³ãã使ãã
ssh ã§ååæ¥ç¶æã«ã~/.ssh/known_hosts ã«æ¥ç¶å sshãµã¼ãã®ãã£ã³ã¬ã¼ããªã³ããè¨é²ãããã©ãã yes/no ãçããå ´é¢ãã§ã¦ãã¾ãã
$ ssh 10.0.0.xx The authenticity of host '10.0.0.xx (10.0.0.xx)' can't be established. RSA key fingerprint is ff:ff:ff:ff:37:83:d8:c5:7a:56:72:c6:48:30:b3:7c. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '10.0.0.xx' (RSA) to the list of known hosts.
ãã® yes ã®å ¥åãæã§æ¯åããã®ã¯é¢åãªã®ã§ãexpect ã³ãã³ãã§èªååãã¦ãã¾ãã¾ãããã
#!/bin/sh for xx in `seq 10 39`; do expect -c " set timeout 3 spawn ssh 10.0.0.$xx expect \"yes/no\" { send \"yes\n\" } expect \":~\" { send \"exit\n\" } exit " done
IPã¢ãã¬ã¹ã10.0.0.10ï½39ã®30å°ã®ãµã¼ãã«å¯¾ãã¦å®è¡ããæ§åã§ãï¼
5. StrictHostKeyChecking no
å®ã¯ãsshã¯ã©ã¤ã¢ã³ãã®æ¥ç¶ãªãã·ã§ã³ã§ -o 'StrictHostKeyChecking no' ãæå®ããã¨ãyes/noã®å¤æãç¡è¦ãã¦å¸¸ã«æ¥ç¶ãããã¨ãã§ãã¾ãã
$ ssh -o 'StrictHostKeyChecking no' 10.0.0.xx
ã¾ãã~/.ssh/config ã§ãStrictHostKeyChecking noãã®è¡ã追å ããã¨å¸¸ã«ãã®è¨å®ãæå¹ã«ãããã¨ãã§ãã¾ãã
$ vi ~/.ssh/config
StrictHostKeyChecking no
ãã ãDNSã¹ãã¼ãã£ã³ã°ãªã©ã§éããµã¼ãã«èªå°ããããããã¨ãã«ãªã¹ã¯ãããã¾ãã®ã§ããã®è¨å®ã¯æ£ç´ãã¾ããå§ãã§ãã¾ãããèªå·±è²¬ä»»ã§ãå©ç¨ãã ããã
6. chpasswdã§ãã¹ã¯ã¼ãè¨å®
ã¾ã¨ãã¦30å°ã®ãµã¼ãã®ãã°ã¤ã³ãã¹ã¯ã¼ããè¨å®ãã¦åã¦ã¼ã¶ã«é å¸ããã·ãã¥ã¨ã¼ã·ã§ã³ã«ééããå ´åãchpasswdã³ãã³ããæ´»ç¨ãã¾ãããã
echo 'username:passw0rd' | sudo chpasswd
ã¿ãåºåãã§ç¨æããåãã°ã¤ã³é 叿 å ±ãå ã«sshçµç±ã§åãµã¼ãã§å®è¡ããã·ã§ã«ã¹ã¯ãªãããPerlã§èªåçæãã¾ãã
#!/usr/bin/perl print<<EOF; #!/bin/sh EOF $_ = <DATA>; while(<DATA>) { chomp; my ($NO, $IP, $USER, $PASS) = split /\t/, $_; print "ssh $IP echo '$USER:\Q$PASS\E' \\| sudo chpasswd\n"; } __DATA__ No IPã¢ãã¬ã¹ ã¦ã¼ã¶ã¼å ãã¹ã¯ã¼ã 1 10.0.0.10 username P@ssw0rd111 2 10.0.0.11 username p!ssw1rd222 3 10.0.0.12 username p#ssw2rd333
ä¸è¨ããã°ã©ã ãå®è¡ããã¨ã以ä¸ã®ã·ã§ã«ã¹ã¯ãªãããçæããã¾ããPerlã®æååä¸ã«\Qã¨\Eã§å¤æ°ãã¯ãããã¨ã«ããã夿°ä¸ã®è¨å·ãèªåã§ã·ã§ã«ã¨ã¹ã±ã¼ãããã¾ãã
#!/bin/sh ssh 10.0.0.10 echo 'username:P\@ssw0rd111' \| sudo chpasswd ssh 10.0.0.11 echo 'username:p\!ssw1rd222' \| sudo chpasswd ssh 10.0.0.12 echo 'username:p\#ssw2rd333' \| sudo chpasswd
sudoã®åã®'|'ã¯ãsshãã°ã¤ã³å¾ã«å®è¡ãããããã'\|'ã¨ãã¦ããå¿ è¦ãããã¾ãã\ã§ã¨ã¹ã±ã¼ãããªãã¨æå ã®sshã³ãã³ããå®è¡ãã¦ãããµã¼ãä¸ã§å®è¡ããã¦ãã¾ãã¾ããã¨ã¹ã±ã¼ããæ³¨æããã®ã¯UNIXãããã§ããã
ãã ããä»åã®ææ³ã§ã¯echoã³ãã³ãã§çã®ãã¹ã¯ã¼ãã表示ãã¦ããããã.bash_historyã«ãã¹ã¯ã¼ãã®å±¥æ´ãæ®ãã¾ãã®ã§ãsshã¿ã¼ããã«ããã³ããã§ããæè»½ãã®åé¢ãã»ãã¥ãªãã£ã¯ä½ä¸ãã¾ãã®ã§ããæ³¨æãã ããã
7. chmod u+sã¨SUID
30å°ã®ãµã¼ãã§sudo chmod u+s /bin/dateãå®è¡ãã¦ãdateã³ãã³ãã«ãSUIDï¼SET UIDï¼ããããä»ãããã·ãã¥ã¨ã¼ã·ã§ã³ãããã¨ãã¾ãã
SUIDã¯UNIXã®ãã¡ã¤ã«ã¢ã¯ã»ã¹æ¨©éã®ä¸ã¤ã§ããã¡ã¤ã«ã®ãªã¼ãã¼æ¨©éã§ä¸è¬ã¦ã¼ã¶ãã³ãã³ããå®è¡ã§ããä»çµã¿ã§ããSUIDãããã©ã«ãã§ã¤ãã¦ããã³ãã³ãã¯passwdã代表ä¾ã§ãroot権éããªãã¦ãã¦ã¼ã¶æ¨©éã§ãã¹ã¯ã¼ã夿´ã§ããããã«ãªã£ã¦ãã¾ãã
$ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 23420 Aug 11 2010 /usr/bin/passwd
dateã³ãã³ãã«ãSUIDããããã¤ãã¦ãæå»ã®å¤æ´ãã¦ã¼ã¶æ¨©éã§è¡ãªãããã¨ããã·ãã¥ã¨ã¼ã·ã§ã³ã§ãã
8. seqã³ãã³ãã¨bashæ¡å¼µæ§æ{1..9}
ã·ã§ã«ã§ç¹°ãè¿ãå®è¡ããfor inæã§ã¯ã¹ãã¼ã¹åºåãã§ç¹°ãè¿ã夿°ã®å¤ãæå®ãã¾ãã
#!/bin/sh for xx in 10 11 12 13 14; do ssh 10.0.0.$xx sudo chmod u+s /bin/date ; done
é£çªã®æ°åãå ¨é¨æã§å ¥åããã®ã¯é¢åãªã®ã§ãseqã³ãã³ãã®çµæãããã¯ã¯ã©ã¼ãã§inã«æ¸¡ãæ¹æ³ãå¤ãããç¥ããã¦ãã¾ãã
#!/bin/sh for xx in `seq 10 39`; do ssh 10.0.0.$xx sudo chmod u+s /bin/date ; done
æè¿ã®bashã§ã¯ã`seq 10 39`ç¸å½ã®ãã¨ãã{10..39}ã§æ¸ããã®ã§ãå°å³ã«ä¾¿å©ã§ããbashã®æ¡å¼µè¨æ³ããããããã¦è¯ãã§ããã
#!/bin/bash for xx in {10..39}; do ssh 10.0.0.$xx sudo chmod u+s /bin/date ; done
9. Excelæ¥åãèªååããã
ä»åº¦ã¯ãã¡ãã£ã¨ãã¤ã¹ããå¤ãã£ã¦ãå¤é¨ã®æ¹ã¨Excelæ¹ç¼ç´ã®ãã¡ã¤ã«ãããã¨ãããå ´åã以ä¸ã®ãããªå®åé ç®ã®å ¥åã¯èªååãã¦ããã¾ãã

Windowsã«ActivePerlãã¤ã³ã¹ãã¼ã«ãã¦ããã¨Win32::OLEã使ããã®ã§ãç¾å¨Excelã§éãã¦ããã·ã¼ãã®é ç®ã«ç¾å¨ã®æ¥ä»ãä»»æã®æååãèªåã§å ¥åãããã¨ãã§ãã¾ãã
#!/usr/bin/perl use Win32::OLE qw(); my $Excel = Win32::OLE->GetActiveObject('Excel.Application'); my $Book = $Excel->ActiveWorkBook; my $Sheet = $Book->ActiveSheet; $Sheet->Range("V3")->{Value} = @{[localtime]}[5] + 1900; # YYYY $Sheet->Range("Z3")->{Value} = @{[localtime]}[4] + 1; # MM $Sheet->Range("AB3")->{Value} = @{[localtime]}[3]; # DD $Sheet->Range("D4")->{Value} = "ã¾ãªã³äºæ¥æ¬é¨ OLæ¨é²å®¤";# é¨ç½² $Sheet->Range("L4")->{Value} = "竹迫 è¯ç¯"; # æ°å $Sheet->Range("V4")->{Value} = "XXXXXXXX"; # 社å¡çªå· $Sheet->Range("D7")->{Value} = "WXX+XXXXX"; # å ç· $Sheet->Range("L7")->{Value} = "03-XXXX-XXXX"; # å¤ç· $Sheet->Range("V7")->{Value} = "ããã³"; # æ ç¹ exit;
ããã°ã©ã ä¸ã§ãã¡ã¤ã«åãæå®ãã¦éãããããå®ã¯ãã®æ¹ã便å©ã ã£ãããã¾ãã
ãã®ãããªExcelæ¥åãçºçããå ´åãããã°ã©ã ã§å ¥åãèªååãã¦æéãå¹çãã使ããã¨ãå¿ é ã§ãã
10. Win32::GuiTest ã§ãã¼ãã¼ãå ¥åãèªåå
ããã«ãWin32::GuiTestã¢ã¸ã¥ã¼ã«ãã¤ã³ã¹ãã¼ã«ããã¨ãSendKeysã§ãã¼ãã¼ãå ¥åãèªååãããã¨ãã§ãã¾ãã
use Win32::GuiTest qw(SendKeys); system("start notepad.exe"); sleep(1); SendKeys("foo{ENTER}"); SendKeys("bar{ENTER}"); SendKeys("bar{BS}z{ENTER}");
ä¸è¨ã¯ãã¡ã¢å¸³ï¼notepad.exeï¼ãèµ·åãã¦ã1ç§å¾ ã£ã¦ãããf o o æ¹è¡ãb a r æ¹è¡ãb a rã¨æã£ã¦ä¸æååé¤ãã¦zãå ¥åãã¦æ¹è¡ããããã°ã©ã ã§ãã
11. MouseMoveAbsPix ã§ãã¦ã¹æä½ãèªåå
Win32::GuiTestã«ã¯ããã¦ã¹ãæä½ããAPIããããMouseMoveAbsPix($x, $y)ã§ä»»æã®åº§æ¨ã«ã«ã¼ã½ã«ãç§»åãããã¨ãã§ãã¾ãã
use Win32::GuiTest qw(:ALL); for ($x = 0; $x < 900; $x += 2) { $y = sin($x / 60) * 300 + 400; MouseMoveAbsPix($x, $y); }
12. ãã¤ã³ã¹ã¤ã¼ãã¼ã®èªåå
ãããã®æè¡ãå¿ç¨ãã¦ã§ããã®ãã5å¹´åã®YAPC::Asia 2011ã§çºè¡¨ããAcme::MineChanã§ãã
- YAPC::Asia Tokyo 2011 ã§ Acme::MineChan ãçºè¡¨ãã¦ãã¾ãã | TAKESAKO
- Perlã§ç¡çã²ã¼ã æ»ç¥ (How to play Win32::GuiTest)ãã®è©³ç´° - YAPC::Asia Tokyo 2011
ããã§ã¯ãã²ã¼ã ã®æ»ç¥ã顿ã«ããAIã使ãã¦ãã¾ãããå®åã®ä»äºã«ãå¿ç¨ã§ãããã¨ã¯æç½ã§ããç§ãå®éã«ã©ããªæ¥åãèªååãã¦ãããã¯â¦å ç·ã¨ããã¦ãã ããã:)
13. BadUSBã«ãããã¼ãã¼ãå ¥åã®èªåå
BadUSBã«ãããã¼ãã¼ãå ¥åã®èªååã«ã¤ãã¦ã¯ãæ¨å¹´ã®Advent Calendarã§è¨äºã«ãã¾ããã®ã§ãIoTãé»åå·¥ä½ã«èå³ã®ããæ¹ã¯ãã²ã覧ãã ããã
14. ã¾ã¨ã
人é¡ã«ä¸ãããã¦ããæéã¯çå¹³çãªãããã©ã®ããã«æéã®æéã使ãããªããã¯ã人ããããã§ãã ä»åç´¹ä»ãããã¯ããã¯ãããã«çºå±ããããããã®éçºããæ©æ¢°å¦ç¿ã«ããåç´ä½æ¥ã®èªååã«ãã£ã¦ã人é¡å ¨ä½ã®ç¡é§ãªæéããªãããã¨ã³ã¸ãã¢åã 人ã®QoLï¼Quality of Lifeï¼ãåä¸ããã¾ãããã